告别终端依赖:nohup 与 bash 脚本执行的协同原理

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 工具可实现日志自动分割和压缩。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值