在Linux中,nohup
命令结合日志管理对脚本运行起着关键作用,主要体现在以下几个方面:
脱离终端持续运行
nohup
(No Hang Up)使脚本在用户退出终端后仍继续运行,避免因会话中断导致的进程终止。
日志记录运行状态
默认将输出重定向到nohup.out
文件(或自定义日志文件),便于后续:
nohup ./script.sh & # 输出自动保存到nohup.out
nohup ./script.sh > /var/log/myscript.log 2>&1 &
>
重定向标准输出2>&1
将标准错误合并到标准输出&
后台运行nohup ./script.sh > /dev/null 2>&1 &
日志轮转
使用logrotate
防止日志文件过大:
/var/log/myscript.log {
daily
rotate 7
compress
missingok
}
按时间分割日志
nohup ./script.sh > /var/log/myscript_$(date +%F).log 2>&1 &
结合系统日志工具
更专业的方案是使用logger
将输出发送到syslog:
#!/bin/bash
exec 1> >(logger -t myscript) 2>&1
# 脚本后续输出会自动记录到系统日志
权限问题
确保日志目录可写:mkdir -p /var/log/scripts && chmod 755 /var/log/scripts
磁盘空间监控
添加监控防止日志占满磁盘:
df -h /var/log | awk 'NR==2 {if ($5 > 90%) system("alert-disk-space.sh")}'
信号处理
nohup
不会忽略SIGKILL
,如需完全守护进程,建议结合systemd
或supervisord
。
使用screen
或tmux
实现交互式后台运行:
screen -S mysession
./script.sh # Ctrl+A, D 分离会话
screen -r mysession # 重新连接
通过合理使用nohup
和日志管理,可以确保脚本稳定运行并保留完整的运行记录,这对自动化任务、定时作业等场景尤为重要。