如何在重启或关机之前执行scp命令?

时间:2018-04-23 15:09:55

标签: ssh scp reboot systemctl

我想在重启或关机之前上传文件 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.从家里的电脑到vps
我的电脑在家里和vps之间建立了ssh凭证 与case1相同的设置。

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.

上传服务似乎正常。

issue1: 为什么

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

在我的家用电脑上?

issue2:

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%,上传的一小部分?
3977379840分之63045632= 0.0158
我的仆人 - 家用电脑骗了我 请详细说明。

3 个答案:

答案 0 :(得分:3)

我可以在重新启动之前使用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 foo@10.10.1.14:

之前我设置了ssh-keys以防止提示输入密码/密码

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脚本成功时才会重新启动。

答案 1 :(得分:2)

所以我创建了一个如下所示的服务文件

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

File downloaded on Shutdown

PS:我选择下载文件而不是scp的原因是我没有scp的外部服务器,我想确保dns解析发生。但这应该适用于scp

答案 2 :(得分:2)

[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