nohup是Linux中一个非常有用的命令,它可以让脚本或程序在用户退出登录后继续运行,从而提高脚本的稳定性。以下是使用nohup提高脚本稳定性的详细方法:
nohup your_script.sh &
这个命令会: 1. 忽略挂断信号(SIGHUP) 2. 将脚本放到后台运行(&) 3. 默认将输出重定向到nohup.out文件
nohup your_script.sh > custom_output.log 2>&1 &
>
重定向标准输出2>&1
将标准错误重定向到标准输出nohup your_script.sh > /dev/null 2>&1 &
setsid your_script.sh > output.log 2>&1 < /dev/null &
setsid会创建一个新的会话,使进程完全脱离终端控制
日志管理:
错误处理:
nohup your_script.sh >> script.log 2>> script.err &
进程监控:
ps aux | grep your_script
检查进程状态pgrep -f "your_script"
结合screen/tmux: 对于更复杂的场景,可以结合screen或tmux使用:
screen -dmS session_name your_script.sh
disown
命令可以将已运行的作业从shell的作业表中移除,使其不受shell退出的影响#!/bin/bash
# 记录PID到文件
echo $$ > /var/run/script.pid
# 主循环
while true; do
# 你的脚本逻辑
/path/to/your/actual_script.sh
# 如果脚本退出,等待后重启
sleep 60
done
然后使用nohup运行:
nohup /path/to/wrapper_script.sh > /var/log/script.log 2>&1 &
这样即使脚本意外退出,也会自动重启,并且所有输出都被妥善记录。