nohup 命令本身不直接支持日志轮转。nohup 的主要作用是让进程在用户退出登录后继续运行,并将输出重定向到指定的文件(通常是 nohup.out)。然而,你可以结合其他工具来实现日志轮转。
以下是一些常见的方法:
logrotatelogrotate 是一个用于管理日志文件的系统工具,可以自动轮转、压缩和删除旧日志文件。你可以配置 logrotate 来处理 nohup 生成的日志文件。
创建一个配置文件:
在 /etc/logrotate.d/ 目录下创建一个新的配置文件,例如 myapp:
sudo nano /etc/logrotate.d/myapp
添加配置内容:
/path/to/nohup.out {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
}
解释:
daily: 每天轮转一次。rotate 7: 保留7个轮转日志文件。compress: 压缩旧日志文件。delaycompress: 延迟压缩,直到下一次轮转。missingok: 如果日志文件丢失,不要报错。notifempty: 如果日志文件为空,不进行轮转。create 640 root adm: 创建新日志文件时设置权限和所有者。测试配置:
sudo logrotate -f /etc/logrotate.d/myapp
syslog 或 rsyslog如果你希望将日志发送到系统的日志服务,可以使用 syslog 或 rsyslog。
修改启动脚本:
在启动脚本中,将 nohup 的输出重定向到 syslog 或 rsyslog:
nohup your_command >> /dev/log 2>&1 &
或者使用 logger 命令:
nohup your_command | logger -t myapp
配置 rsyslog:
编辑 /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf,添加以下内容:
if $programname == 'myapp' then /var/log/myapp.log
& stop
这会将 myapp 的日志发送到 /var/log/myapp.log,并且不会继续传递给其他规则。
重启 rsyslog:
sudo systemctl restart rsyslog
通过这些方法,你可以有效地管理 nohup 命令生成的日志文件,实现日志轮转和清理。