如何在重启或关机前执行 scp 命令?
How to execute a scp command before reboot or shutdown?
我想在重启或关机前上传文件。
1.From 我的 vps 到 vps
upload.service
的设置
vim /etc/systemd/system/upload.service
[Unit]
Description=upload files into my vps
Before=shutdown.target reboot.target
Requires=network-online.target
After=network.target
[Service]
ExecStart=/bin/true
ExecStop=/bin/bash /home/upload.sh
[Install]
WantedBy=multi-user.target
upload.sh
的脚本
vim /home/upload.sh
/usr/bin/scp -P 22 -i /home/.ssh/id_rsa /home/wp.bak root@remote_ip:/home
是时候测试一下了。
systemctl enable upload
reboot
已验证 wp.bak 可以在重新启动时从我的 vps1 上传到 vps2。
2.From 家里的电脑 vps
我家里的电脑和 vps.
之间已经建立了 ssh 凭证
与案例 1 相同的设置。
journalctl -u upload
Started upload files into my vps.
ssh: connect to host xxxxxxxxxx port 22: Network is unreachable
lost connection
把After=network.target
写成After=network.target ssh.service
是没有用的。
照 nbari 说的做。
sudo vim /etc/systemd/system/upload.service
[Unit]
Description=upload files into my vps
Before=shutdown.target reboot.target
After=network.target network-online.target
Requires=network-online.target network.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /home/debian9/upload.sh
[Install]
WantedBy=multi-user.target
sudo vim /home/upload.sh
/usr/bin/scp -P 22 -i /home/.ssh/id_rsa /home/wp.bak root@remote_ip:/home
sudo systemctl daemon-reload
sudo systemctl enable upload
重启电脑
sudo journalctl -u upload
-- Logs begin at Fri 2018-04-27 10:46:34 HKT, end at Fri 2018-04-27 11:00:23 HKT
Apr 27 10:46:51 hwy systemd[1]: Started upload files into my vps.
上传服务好像没问题
问题一:
为什么
ExecStart=/bin/true
ExecStop=/bin/bash /home/upload.sh
在我的 vps 上工作正常吗?
为什么
RemainAfterExit=true
ExecStop=/bin/bash /home/upload.sh
可以替代
ExecStart=/bin/true
ExecStop=/bin/bash /home/upload.sh
在我家里的电脑上?
问题 2:
wp.bak是个3G多的大文件
time /usr/bin/scp -P 22 -i /home/.ssh/id_rsa /home/wp.bak root@remote_ip:/home
花费了我 3000 秒(50 分钟,将近一小时)或更多。
获取我电脑中的文件大小
ls -al /home/wp.bak
-rw-r--r-- 1 debian9 debian9 3977379840 Apr 22 12:23 /home/wp.bak
在我的vps.
中获取上传的文件大小
ssh root@vps_ip
ls -al /home/wp.bak
-rw-r--r-- 1 root root 63045632 Apr 27 02:46 /home/wp.bak
为什么只有 1.6%,上传了一小部分?
63045632/3977379840=0.0158
我的仆人--家里的电脑骗了我。
请详细说明。
所以我创建了一个如下所示的服务文件
root@vagrant:/etc/systemd/system# cat shutdownscript.service
[Unit]
Description=...
After=network-online.target network.target
[Service]
Type=oneshot
#RemainAfterExit=true
#ExecStart=/bin/true
ExecStart=/bin/bash -c "cd /home/vagrant/ && wget https://download-cf.jetbrains.com/webstorm/WebStorm-2017.2.6.dmg"
[Install]
WantedBy=reboot.target
然后像下面一样启用
systemctl daemon-reload
systemctl enable shutdownscript
并重新启动。重启后
$ ls ~/*.dmg
/home/vagrant/WebStorm-2017.2.6.dmg
PS:我选择下载文件而不是 scp
的原因是我没有 scp
的外部服务器,我想确保进行 dns 解析.但这也适用于 scp
我可以在重新启动前使用 scp
上传文件,使用此服务的配置略有不同:/etc/systemd/system/upload.service
:
[Unit]
Description=upload files into my vps
Requires=network.target
After=network.target
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /root/upload.sh
[Install]
WantedBy=multi-user.target
我不得不使用 RemainAfterExit=true
,而不是 ExecStart=/bin/true
创建服务后我 运行 systemctl daemon-reload
和 systemctl enable yourservice
我在 upload.sh
:
中使用它进行了测试
scp /root/foo.txt foo@10.10.1.14:
之前我设置了 ssh-keys 以防止收到 password/passphrase
的提示
journalctl -u upload
的输出:
Apr 26 08:35:53 my-vm systemd[1]: Started upload files into my vps.
Apr 26 08:35:53 my-vm systemd[1]: Starting upload files into my vps...
作为备用,您还可以使用:
upload.sh && reboot
在这种情况下,它只会在您的 upload
脚本成功时重新启动。
[Unit]
Description=upload files into my vps
Requires=network.target
After=network.target
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /root/upload.sh
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target
我想在重启或关机前上传文件。
1.From 我的 vps 到 vps
upload.service
vim /etc/systemd/system/upload.service
[Unit]
Description=upload files into my vps
Before=shutdown.target reboot.target
Requires=network-online.target
After=network.target
[Service]
ExecStart=/bin/true
ExecStop=/bin/bash /home/upload.sh
[Install]
WantedBy=multi-user.target
upload.sh
的脚本vim /home/upload.sh
/usr/bin/scp -P 22 -i /home/.ssh/id_rsa /home/wp.bak root@remote_ip:/home
是时候测试一下了。
systemctl enable upload
reboot
已验证 wp.bak 可以在重新启动时从我的 vps1 上传到 vps2。
2.From 家里的电脑 vps
我家里的电脑和 vps.
之间已经建立了 ssh 凭证
与案例 1 相同的设置。
journalctl -u upload
Started upload files into my vps.
ssh: connect to host xxxxxxxxxx port 22: Network is unreachable
lost connection
把After=network.target
写成After=network.target ssh.service
是没有用的。
照 nbari 说的做。
sudo vim /etc/systemd/system/upload.service
[Unit]
Description=upload files into my vps
Before=shutdown.target reboot.target
After=network.target network-online.target
Requires=network-online.target network.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /home/debian9/upload.sh
[Install]
WantedBy=multi-user.target
sudo vim /home/upload.sh
/usr/bin/scp -P 22 -i /home/.ssh/id_rsa /home/wp.bak root@remote_ip:/home
sudo systemctl daemon-reload
sudo systemctl enable upload
重启电脑
sudo journalctl -u upload
-- Logs begin at Fri 2018-04-27 10:46:34 HKT, end at Fri 2018-04-27 11:00:23 HKT
Apr 27 10:46:51 hwy systemd[1]: Started upload files into my vps.
上传服务好像没问题
问题一: 为什么
ExecStart=/bin/true
ExecStop=/bin/bash /home/upload.sh
在我的 vps 上工作正常吗?
为什么
RemainAfterExit=true
ExecStop=/bin/bash /home/upload.sh
可以替代
ExecStart=/bin/true
ExecStop=/bin/bash /home/upload.sh
在我家里的电脑上?
问题 2:
wp.bak是个3G多的大文件
time /usr/bin/scp -P 22 -i /home/.ssh/id_rsa /home/wp.bak root@remote_ip:/home
花费了我 3000 秒(50 分钟,将近一小时)或更多。
获取我电脑中的文件大小
ls -al /home/wp.bak
-rw-r--r-- 1 debian9 debian9 3977379840 Apr 22 12:23 /home/wp.bak
在我的vps.
中获取上传的文件大小ssh root@vps_ip
ls -al /home/wp.bak
-rw-r--r-- 1 root root 63045632 Apr 27 02:46 /home/wp.bak
为什么只有 1.6%,上传了一小部分?
63045632/3977379840=0.0158
我的仆人--家里的电脑骗了我。
请详细说明。
所以我创建了一个如下所示的服务文件
root@vagrant:/etc/systemd/system# cat shutdownscript.service
[Unit]
Description=...
After=network-online.target network.target
[Service]
Type=oneshot
#RemainAfterExit=true
#ExecStart=/bin/true
ExecStart=/bin/bash -c "cd /home/vagrant/ && wget https://download-cf.jetbrains.com/webstorm/WebStorm-2017.2.6.dmg"
[Install]
WantedBy=reboot.target
然后像下面一样启用
systemctl daemon-reload
systemctl enable shutdownscript
并重新启动。重启后
$ ls ~/*.dmg
/home/vagrant/WebStorm-2017.2.6.dmg
PS:我选择下载文件而不是 scp
的原因是我没有 scp
的外部服务器,我想确保进行 dns 解析.但这也适用于 scp
我可以在重新启动前使用 scp
上传文件,使用此服务的配置略有不同:/etc/systemd/system/upload.service
:
[Unit]
Description=upload files into my vps
Requires=network.target
After=network.target
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /root/upload.sh
[Install]
WantedBy=multi-user.target
我不得不使用 RemainAfterExit=true
,而不是 ExecStart=/bin/true
创建服务后我 运行 systemctl daemon-reload
和 systemctl enable yourservice
我在 upload.sh
:
scp /root/foo.txt foo@10.10.1.14:
之前我设置了 ssh-keys 以防止收到 password/passphrase
的提示journalctl -u upload
的输出:
Apr 26 08:35:53 my-vm systemd[1]: Started upload files into my vps.
Apr 26 08:35:53 my-vm systemd[1]: Starting upload files into my vps...
作为备用,您还可以使用:
upload.sh && reboot
在这种情况下,它只会在您的 upload
脚本成功时重新启动。
[Unit]
Description=upload files into my vps
Requires=network.target
After=network.target
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /root/upload.sh
TimeoutSec=infinity
[Install]
WantedBy=multi-user.target