如何在重启或关机前执行SCP命令?实现VPS间文件上传
如何在VPS重启/关机前自动将文件上传到另一台VPS?
我之前刚好配置过类似的需求,通过systemd服务可以轻松实现这个功能,下面是具体的分步操作:
1. 创建并配置systemd服务文件
我们需要创建一个systemd服务,让它在系统关机或重启前触发文件上传操作:
- 打开服务文件进行编辑:
vim /etc/systemd/system/upload.service - 将以下内容写入文件:
这里几个关键配置的作用:[Unit] Description=将文件上传至我的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.targetBefore=shutdown.target reboot.target:确保服务在关机或重启动作开始前执行停止逻辑(也就是我们的上传脚本)Requires=network-online.target:保证网络连接正常后再执行脚本,避免因网络问题导致上传失败ExecStart=/bin/true:这个服务不需要常驻运行,所以启动命令设为无意义的true即可;真正的上传动作在ExecStop里,系统停止服务时会自动触发该命令
2. 编写文件上传脚本
接下来创建实际执行上传操作的shell脚本:
打开脚本文件编辑:
vim /home/upload.sh写入scp上传命令(记得替换成你的实际路径和远程VPS信息):
/usr/bin/scp -P 22 -i /home/.ssh/id_rsa /home/wp.bak root@remote_ip:/home参数说明:
-P 22:指定远程VPS的SSH端口(如果你的远程VPS用了非默认端口,这里要改成对应数值)-i /home/.ssh/id_rsa:使用指定的SSH密钥登录远程VPS,避免上传时需要手动输入密码/home/wp.bak:本地VPS中需要上传的文件路径root@remote_ip:/home:远程VPS的用户名、IP地址以及文件要存放的目标目录
给脚本添加执行权限,否则系统无法运行它:
chmod +x /home/upload.sh
重要提醒:如果还没将本地VPS的SSH公钥传到远程VPS,必须先执行下面的命令完成免密登录配置,否则上传时会失败:
ssh-copy-id -i /home/.ssh/id_rsa root@remote_ip
3. 启用并测试服务
- 启用服务,让它随系统开机自动加载:
systemctl enable upload.service - 可以手动停止服务来测试上传逻辑是否正常:
执行完后去远程VPS的目标目录检查文件是否已经上传成功,确认没问题后,下次VPS关机或重启时就会自动执行这个上传操作了。systemctl stop upload.service
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

