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

nohup能否在系统完全关机或sudo重启后持续运行?及替代方案咨询

nohup能否在系统完全关机或sudo重启后持续运行?及替代方案咨询

首先直接给你答案:不行。nohup只能帮你解决「关闭终端后进程不终止」的问题,但系统完全关机或者重启时,所有运行中的进程都会被内核终止——不管你用不用nohup。

为什么nohup做不到?

nohup的核心作用是让进程忽略SIGHUP信号(当你关闭终端时,终端会给关联的进程发送这个信号触发退出),同时默认把标准输出/错误重定向到nohup.out文件。但它没有能力让进程在系统重启后“复活”——系统重启时内核会终止所有进程,重启完成后不会自动重新启动这些进程。

适合你的替代方案(针对Ubuntu 16.04)

下面推荐几个能让脚本在系统重启后自动运行的方案,按推荐程度排序:

  • 方案一:用systemd创建开机自启服务(最稳定,推荐)
    Ubuntu 16.04已经默认使用systemd作为系统服务管理器,它不仅能让脚本开机自启,还能在进程意外崩溃时自动重启,管理起来非常方便。步骤如下:

    1. 创建一个服务配置文件,比如/etc/systemd/system/nationalbiblioteket.service,填入以下内容(注意替换所有/绝对路径为你实际的文件路径):
      [Unit]
      Description=Nationalbiblioteket日志处理服务
      After=network.target  # 如果脚本需要网络连接,保留这一行;不需要可以删掉
      
      [Service]
      User=root  # 你用管理员身份运行,所以指定root用户
      ExecStart=/usr/bin/python -u /脚本的绝对路径/nationalbiblioteket_logs.py --query 0
      WorkingDirectory=/脚本所在目录的绝对路径
      Restart=always  # 进程意外退出时自动重启
      RestartSec=5  # 重启间隔5秒
      StandardOutput=append:/日志文件的绝对路径/log_q0.out  # 输出追加到指定日志
      StandardError=inherit  # 错误输出和标准输出合并到同一个文件
      
      [Install]
      WantedBy=multi-user.target
      
    2. 保存文件后,刷新systemd的配置:
      sudo systemctl daemon-reload
      
    3. 设置开机自启并立即启动服务:
      sudo systemctl enable nationalbiblioteket.service
      sudo systemctl start nationalbiblioteket.service
      

    之后你可以用sudo systemctl status nationalbiblioteket.service查看服务运行状态,用journalctl -u nationalbiblioteket.service查看详细日志。

  • 方案二:用cron的@reboot任务(简单快捷)
    如果你的需求只是开机自动运行脚本,不需要监控进程崩溃重启的功能,cron是个更轻量的选择:

    1. 编辑root用户的crontab(因为你用管理员身份运行):
      sudo crontab -e
      
    2. 在文件末尾添加一行(所有路径必须用绝对路径,因为cron的环境变量和用户终端不同):
      @reboot nohup /usr/bin/python -u /脚本的绝对路径/nationalbiblioteket_logs.py --query 0 > /日志文件的绝对路径/log_q0.out 2>&1 &
      
    3. 保存退出即可。下次系统重启时,脚本会自动以root身份运行。
  • 方案三:使用Supervisor(适合多进程管理)
    如果你需要同时管理多个类似的长期运行脚本,Supervisor是个不错的选择,它能自动重启崩溃的进程,管理起来更灵活:

    1. 先安装Supervisor:
      sudo apt-get update && sudo apt-get install supervisor
      
    2. 创建配置文件/etc/supervisor/conf.d/nationalbiblioteket.conf,内容如下:
      [program:nationalbiblioteket]
      command=/usr/bin/python -u /脚本的绝对路径/nationalbiblioteket_logs.py --query 0
      directory=/脚本所在目录的绝对路径
      user=root
      stdout_logfile=/日志文件的绝对路径/log_q0.out
      stdout_logfile_maxbytes=10MB  # 日志文件最大10MB,满了会自动切割
      stderr_logfile=/日志文件的绝对路径/log_q0.err  # 单独保存错误日志
      stderr_logfile_maxbytes=10MB
      autorestart=true  # 进程崩溃时自动重启
      
    3. 重新加载配置并启动进程:
      sudo supervisorctl reread
      sudo supervisorctl update
      sudo supervisorctl start nationalbiblioteket
      

    你可以用sudo supervisorctl status查看所有进程状态,用supervisorctl tail nationalbiblioteket实时查看日志。

备注:内容来源于stack exchange,提问作者farid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:19:06