nohup 的基本原理
nohup(no hang up)是 Unix/Linux 系统的一个命令,用于让进程在用户退出终端后继续运行。默认情况下,终端关闭时,系统会向所有关联的进程发送 SIGHUP 信号,导致进程终止。nohup 的作用是忽略 SIGHUP 信号,并将输出重定向到文件(默认生成 nohup.out)。
使用方式:
nohup command &
bash 脚本的后台执行
在 bash 脚本中,通过在命令末尾添加 & 符号可以将进程放入后台运行。这样即使脚本退出,进程仍会继续执行,但会受终端关闭影响。结合 nohup 可彻底解决终端依赖问题:
nohup ./script.sh > output.log 2>&1 &
输出重定向机制
nohup 默认将 stdout 和 stderr 合并输出到 nohup.out 文件。通过明确重定向可以自定义输出路径:
> output.log重定向标准输出2>&1将标准错误合并到标准输出&表示后台运行
进程守护的关键步骤
创建持久化进程需注意以下要点:
nohup bash -c 'while true; do ./task.sh; sleep 10; done' > logfile 2>&1 &
通过 bash -c 执行复合命令,配合循环可实现自动重启机制。
PID 管理与进程监控
建议记录进程 ID 以便后续管理:
echo $! > pid.file
通过保存的 PID 可进行进程状态检查或终止操作:
kill $(cat pid.file)
系统级守护方案
对于生产环境,建议使用 systemd 或 supervisor 等专业工具:
# systemd 示例单元文件
[Service]
ExecStart=/path/to/script.sh
Restart=always
User=deploy
日志轮转策略
长期运行的进程需要配置日志管理:
nohup ./service.sh >> /var/log/service.log 2>&1 &
配合 logrotate 工具可实现日志自动分割和压缩。
836

被折叠的 条评论
为什么被折叠?



