我想在重新启动或关闭之前上传文件。
1.从我的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.从家用PC到VPS
已在我的家用PC和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是没有用的。

照恩巴里说的做。
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.

看来上传服务运作良好。

问题1:
为什么
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
我的仆人-家用计算机对我撒谎。
请详细说明。

最佳答案

在重启之前,我可以使用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-reloadsystemctl enable yourservice
我在upload.sh中使用了它进行了测试:
scp /root/foo.txt [email protected]:

以前,我设置了ssh键,以防止提示输入密码/密码
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脚本成功的情况下,它才会重新启动。

关于ssh - 如何在重启或关机之前执行scp命令?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49984368/

10-13 08:25