在CentOS系统中,使用nohup
命令运行程序时,默认情况下,程序的输出会被重定向到一个名为nohup.out
的文件中。如果你想要设置日志保留策略,可以采用以下几种方法:
logrotate
工具logrotate
是Linux系统中用于管理日志文件的工具,它可以自动压缩、删除和轮转日志文件。
logrotate
CentOS 7及以上版本默认已经安装了logrotate
,如果没有安装,可以使用以下命令安装:
sudo yum install logrotate
logrotate
创建一个新的配置文件或编辑现有的配置文件(通常位于/etc/logrotate.d/
目录下),例如/etc/logrotate.d/myapp
,并添加以下内容:
/path/to/your/logfile {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
解释:
daily
: 每天轮转一次日志。rotate 7
: 保留7天的日志文件。compress
: 压缩旧的日志文件。missingok
: 如果日志文件不存在,不会报错。notifempty
: 如果日志文件为空,不进行轮转。create 640 root adm
: 创建新的日志文件,权限为640,属主为root,属组为adm。如果你不想使用logrotate
,也可以手动管理日志文件。例如,你可以编写一个脚本来定期清理旧的日志文件。
创建一个名为cleanup_logs.sh
的脚本:
#!/bin/bash
LOG_DIR="/path/to/your/logs"
MAX_DAYS=7
# 删除超过最大天数的日志文件
find "$LOG_DIR" -type f -name "*.log" -mtime +$MAX_DAYS -exec rm -f {} \;
赋予脚本执行权限:
chmod +x cleanup_logs.sh
然后,你可以将这个脚本添加到cron作业中,定期执行:
crontab -e
添加以下行,每天凌晨1点执行清理脚本:
0 1 * * * /path/to/cleanup_logs.sh
systemd
服务如果你使用systemd
来管理你的服务,可以在服务单元文件中配置日志轮转。
编辑你的服务单元文件(通常位于/etc/systemd/system/
目录下),例如myapp.service
,并添加以下内容:
[Service]
ExecStart=/path/to/your/application
StandardOutput=append:/path/to/your/logfile
StandardError=append:/path/to/your/logfile
Restart=always
[Install]
WantedBy=multi-user.target
然后,创建一个logrotate
配置文件(例如/etc/logrotate.d/myapp
),内容如下:
/path/to/your/logfile {
daily
rotate 7
compress
missingok
notifempty
create 640 root adm
}
最后,重新加载systemd
配置并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart myapp
通过以上方法,你可以有效地管理nohup
命令生成的日志文件,确保日志文件不会无限增长,同时保留必要的历史记录。