在 CentOS 系统中,nohup
命令用于在后台运行程序,即使关闭终端也不会中断程序运行。默认情况下,nohup
会将输出重定向到 nohup.out
文件中,但没有内置的日志大小限制功能。如果你需要限制 nohup.out
文件的大小,可以使用以下几种方法:
logrotate
logrotate
是一个用于管理日志文件的工具,可以自动轮转、压缩和删除旧日志文件。
安装 logrotate
(如果尚未安装):
sudo yum install logrotate
创建 logrotate
配置文件:
在 /etc/logrotate.d/
目录下创建一个新的配置文件,例如 nohup
:
sudo nano /etc/logrotate.d/nohup
添加配置内容: 在文件中添加以下内容,根据需要调整日志文件路径和大小限制:
/path/to/your/nohup.out {
size 100M
rotate 5
compress
missingok
notifempty
create 640 root root
}
解释:
size 100M
:当日志文件达到 100MB 时进行轮转。rotate 5
:保留 5 个轮转日志文件。compress
:压缩旧日志文件。missingok
:如果日志文件不存在,不会报错。notifempty
:如果日志文件为空,不进行轮转。create 640 root root
:创建新日志文件时的权限和所有者。测试配置:
sudo logrotate -f /etc/logrotate.d/nohup
split
命令split
命令可以将大文件分割成多个小文件。
运行程序并使用 split
:
nohup your_command > >(split -b 100M - nohup_part_) 2>&1 &
解释:
split -b 100M - nohup_part_
:将输出分割成每个 100MB 的小文件,文件名前缀为 nohup_part_
。2>&1
:将标准错误输出重定向到标准输出,一起分割。合并日志文件:
当需要查看完整日志时,可以使用 cat
命令合并分割的文件:
cat nohup_part_* > nohup.out
编写一个自定义脚本来监控日志文件大小,并在达到指定大小时进行轮转。
创建脚本:
sudo nano /usr/local/bin/logrotate_nohup.sh
添加脚本内容:
#!/bin/bash
LOG_FILE="/path/to/your/nohup.out"
MAX_SIZE=100M
BACKUP_COUNT=5
if [ -f "$LOG_FILE" ]; then
FILE_SIZE=$(stat -c%s "$LOG_FILE")
if [ "$FILE_SIZE" -gt $(numfmt --from=iec $MAX_SIZE) ]; then
TIMESTAMP=$(date +%Y%m%d%H%M%S)
mv "$LOG_FILE" "${LOG_FILE}_$TIMESTAMP"
touch "$LOG_FILE"
fi
fi
赋予执行权限:
sudo chmod +x /usr/local/bin/logrotate_nohup.sh
设置定时任务:
使用 cron
设置定时任务,定期运行脚本:
crontab -e
添加以下行,每分钟运行一次脚本:
* * * * * /usr/local/bin/logrotate_nohup.sh
通过以上方法,你可以有效地管理 nohup
日志文件的大小,避免日志文件过大导致的问题。