在 CentOS 系统中,使用 nohup 命令结合 logrotate 工具可以实现日志轮转。logrotate 是一个用于管理日志文件的工具,它可以自动压缩、删除和轮转日志文件。以下是配置和使用方法:
首先,确保 logrotate 已经安装在你的 CentOS 系统上。如果没有安装,可以使用以下命令进行安装:
sudo yum install logrotate
logrotate 的配置文件通常位于 /etc/logrotate.conf 和 /etc/logrotate.d/ 目录下。你可以编辑这些文件来配置日志轮转。
假设你有一个使用 nohup 运行的应用程序,生成的日志文件是 /var/log/myapp.log。你可以创建一个自定义的配置文件来管理这个日志文件。
sudo vi /etc/logrotate.d/myapp
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
解释:
daily: 每天轮转一次日志文件。rotate 7: 保留最近 7 天的日志文件。compress: 压缩旧的日志文件。missingok: 如果日志文件不存在,不会报错。notifempty: 如果日志文件为空,不进行轮转。create 640 root adm: 创建新的日志文件,权限为 640,属主为 root,属组为 adm。确保你的应用程序使用 nohup 命令运行,并将输出重定向到日志文件。例如:
nohup your_application > /var/log/myapp.log 2>&1 &
这会将标准输出和标准错误都重定向到 /var/log/myapp.log 文件,并且即使终端关闭,应用程序也会继续运行。
你可以手动测试 logrotate 是否正常工作:
sudo logrotate -f /etc/logrotate.d/myapp
-f 选项表示强制轮转日志文件。
logrotate 通常会每天自动运行一次。你可以通过编辑 /etc/cron.daily/logrotate 文件来调整这个行为,或者使用 systemd 定时任务来更精细地控制。
创建一个新的 systemd 定时任务文件:
sudo vi /etc/systemd/system/logrotate@.service
添加以下内容:
[Unit]
Description=Logrotate for %I
[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/logrotate.conf
RemainAfterExit=yes
[Install]
WantedBy=timers.target
启用并启动定时任务:
sudo systemctl enable --now logrotate.target
这样,logrotate 将每天自动运行一次,并根据你的配置文件进行日志轮转。
通过以上步骤,你可以在 CentOS 系统中使用 nohup 和 logrotate 实现日志轮转。