You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在重启或关机前执行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.target
    
    这里几个关键配置的作用:
    • Before=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
    
  • 可以手动停止服务来测试上传逻辑是否正常:
    systemctl stop upload.service
    
    执行完后去远程VPS的目标目录检查文件是否已经上传成功,确认没问题后,下次VPS关机或重启时就会自动执行这个上传操作了。

内容的提问来源于stack exchange,提问作者showkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:08:27