在 CentOS 系统中,使用 nohup
命令运行程序时,默认情况下不会进行日志轮转。为了实现日志轮转,你可以使用 logrotate
工具来管理日志文件。以下是如何设置 logrotate
来轮转 nohup
生成的日志文件的步骤:
创建一个日志文件:
假设你使用 nohup
运行的程序将日志输出到 /var/log/myapp.log
,你可以手动创建这个文件(如果它还不存在):
sudo touch /var/log/myapp.log
sudo chown your_user:your_group /var/log/myapp.log
创建一个 logrotate 配置文件:
在 /etc/logrotate.d/
目录下创建一个新的配置文件,例如 myapp
:
sudo nano /etc/logrotate.d/myapp
编辑 logrotate 配置文件: 在打开的文件中添加以下内容:
/var/log/myapp.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 your_user your_group
}
解释一下这些选项:
daily
: 每天轮转一次日志文件。rotate 7
: 保留7个轮转的日志文件。compress
: 轮转后的日志文件进行压缩。delaycompress
: 延迟压缩,直到下一次轮转。missingok
: 如果日志文件不存在,不会报错。notifempty
: 如果日志文件为空,不进行轮转。create 640 your_user your_group
: 轮转后创建新的日志文件,权限为640,属主和属组为指定的用户和组。测试 logrotate 配置:
你可以手动测试 logrotate
配置是否正确:
sudo logrotate -f /etc/logrotate.d/myapp
这会强制执行一次日志轮转,并根据配置文件中的设置处理日志文件。
确保 logrotate 定期运行:
logrotate
通常由 cron 定期执行。你可以检查 /etc/cron.daily/logrotate
文件来确保 logrotate
每天运行:
sudo nano /etc/cron.daily/logrotate
确保文件内容如下:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
通过以上步骤,你可以确保 nohup
生成的日志文件能够被定期轮转和管理。