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

如何通过SSH连接Azure VM并在本地机关闭后让程序永久运行?

Azure VM后台持久运行爬取程序的解决方案

现有方案失效原因排查

你之前用的nohup和screen本身是支持脱离SSH会话运行的,失效大概率是操作不规范导致的:

  • 运行nohup时需要按标准格式执行,且正常退出SSH:
    正确命令格式为 nohup 你的程序启动命令 > run.log 2>&1 &,执行完成后必须输入 exit 主动退出SSH会话,不要直接关闭终端窗口,否则终端会向会话内所有进程发送SIGHUP信号,可能导致进程被终止。
  • 使用screen时需要走detach流程:
    程序启动后按Ctrl+A+D快捷键将会话放到后台运行,不要直接在screen内输入exit退出,否则进程会随screen会话一同销毁。

更稳定的实现方案(推荐)

方案1:systemd系统服务(最优,支持开机自启、异常自动重启)

完全脱离用户会话生命周期管理,是Linux后台常驻进程的标准实现方式,配置步骤如下:

  1. 新建服务配置文件,执行命令:sudo vim /etc/systemd/system/data-crawler.service
  2. 写入如下配置(替换尖括号内的内容为你自己的实际路径):
[Unit]
Description=10 minutes interval data crawler
After=network.target

[Service]
User=<你的VM登录用户名>
WorkingDirectory=<你的爬虫程序所在的文件夹绝对路径>
ExecStart=<你的程序启动命令的绝对路径,比如/usr/bin/python3 /home/xxx/crawler.py>
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
  1. 依次执行命令启动服务并设置开机自启:
  • 重载systemd配置:sudo systemctl daemon-reload
  • 启动服务:sudo systemctl start data-crawler.service
  • 开启开机自启:sudo systemctl enable data-crawler.service
  • 查看服务运行状态:sudo systemctl status data-crawler.service
  • 查看程序运行日志:journalctl -u data-crawler.service -f

方案2:Crontab定时任务(适合单次执行的爬取逻辑)

如果你的程序不需要常驻内存,每次执行完爬取就可以退出,可以不用自己写while循环,直接用系统定时任务调度,配置步骤:

  1. 执行命令编辑当前用户的定时任务:crontab -e
  2. 在文件末尾添加一行(替换尖括号内容):
*/10 * * * * <你的程序启动命令绝对路径> >> <你要保存日志的路径,比如/home/xxx/crawler.log> 2>&1

保存退出后就会自动生效,每10分钟执行一次你的爬取程序。

方案3:Azure原生无服务方案(可选,省成本)

如果你不想长期保持VM运行,可以使用Azure Functions定时触发器,配置每10分钟触发一次爬取逻辑,无需维护服务器,按调用次数计费,成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:24:03