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

nohup脚本是否随服务器持续运行?本地部署稳定性问询

关于树莓派上用nohup运行脚本的隐患与可靠性分析

首先直接给出结论:仅靠 nohup ./xxx.sh & 的方式,没办法保证程序始终持续运行,哪怕系统一直供电,还是存在不少中断风险。下面具体拆解隐患,以及更可靠的替代方案:

你当前方案的核心隐患

  • 脚本意外退出无自动重启机制:如果你的脚本在周末待机期间遇到错误(比如依赖工具崩溃、内存溢出、文件读写权限问题),或是内部逻辑处理不当导致自行退出,nohup 不会帮你重启它——等到周一9:30,任务自然就无法触发了。
  • 系统级的进程终止风险:Raspbian的OOM Killer(内存不足杀手)会在系统内存耗尽时,主动杀掉占用内存较高的进程;如果你的脚本内存占用持续上涨,或是其他后台进程抢占资源,就可能被系统强制终止。另外,如果开启了系统自动更新,更新过程中可能触发系统重启,所有后台进程都会消失。
  • nohup.out磁盘溢出风险:默认情况下,nohup 会把脚本的输出写入当前目录的 nohup.out 文件。如果你的脚本持续输出日志,这个文件会越来越大,最终占满树莓派的SD卡空间,导致进程因磁盘满而崩溃。

「只要系统供电,程序是否会持续运行?」

答案是不一定。上面提到的任何一种情况(脚本自退、被OOM Killer杀掉、磁盘满、系统意外重启),都会让进程终止——哪怕供电完全正常。

更可靠的替代方案:用systemd管理脚本

对于树莓派这种需要长期稳定运行的场景,推荐用 systemd 来托管你的脚本,它能提供进程监控、自动重启、开机自启等功能,比 nohup 靠谱得多。具体步骤如下:

1. 创建systemd服务文件

针对每个脚本,创建对应的服务配置文件。比如针对 Eye.sh,创建 /etc/systemd/system/eye.service(用 sudo nano 编辑):

[Unit]
Description=Eye Script Service
After=multi-user.target

[Service]
Type=simple
User=pi  # 替换成你的树莓派用户名
WorkingDirectory=/home/pi/your-script-folder  # 替换成脚本所在的目录
ExecStart=/home/pi/your-script-folder/Eye.sh
Restart=always  # 进程意外退出时自动重启
RestartSec=5  # 重启间隔5秒

[Install]
WantedBy=multi-user.target

同理,为 Hand.sh 和 Foot.sh 创建 hand.service 和 foot.service,修改对应的名称、路径即可。

2. 启用并启动服务

执行以下命令让systemd加载新配置,设置开机自启并启动服务:

sudo systemctl daemon-reload
sudo systemctl enable eye.service hand.service foot.service
sudo systemctl start eye.service hand.service foot.service

3. 检查服务状态

可以用以下命令查看服务是否正常运行:

sudo systemctl status eye.service

这样配置后,哪怕系统重启,脚本会自动启动;如果进程意外崩溃,systemd会在5秒后自动重启它,完美解决你担心的「无需重新SSH登录保证程序运行」的需求。

另外,如果你的脚本是靠内部逻辑(比如 sleep 到周一9:30)触发任务,这样的配置完全兼容;如果是想让脚本仅在周一9:30启动,也可以结合 cron 定时任务,但用systemd托管的方式更适合需要长期驻留后台的脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:21:35