nohup
命令用于在后臺運行程序,即使關閉終端也不會中斷。默認情況下,nohup
會將輸出重定向到 nohup.out
文件。為了防止這個文件變得過大,可以使用日志輪轉策略。以下是幾種常見的方法來設置 nohup
日志的輪轉策略:
logrotate
工具logrotate
是一個非常強大的日志管理工具,可以自動輪轉、壓縮和刪除日志文件。
創建一個配置文件:
在 /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
: 創建新的日志文件,權限為640,屬主為root,屬組為adm。測試配置:
你可以手動測試 logrotate
配置是否正確:
sudo logrotate -f /etc/logrotate.d/myapp
cron
定時任務如果你不想使用 logrotate
,也可以使用 cron
定時任務來手動輪轉日志。
編輯 crontab
文件:
crontab -e
添加定時任務: 添加以下內容,每天午夜執行一次日志輪轉:
0 0 * * * /bin/mv /path/to/nohup.out /path/to/nohup.out.$(date +\%Y\%m\%d)
0 0 * * * /usr/bin/find /path/to -name 'nohup.out.*' -type f -mtime +7 -exec rm {} \;
解釋:
nohup.out
重命名為 nohup.out.YYYYMMDD
。split
命令你也可以使用 split
命令來分割日志文件。
創建一個腳本:
創建一個腳本文件,例如 rotate_nohup.sh
。
nano rotate_nohup.sh
添加腳本內容:
#!/bin/bash
LOG_FILE="/path/to/nohup.out"
MAX_SIZE=100M
TIMESTAMP=$(date +\%Y\%m\%d\%H\%M\%S)
mv $LOG_FILE "${LOG_FILE}.${TIMESTAMP}"
touch $LOG_FILE
賦予執行權限:
chmod +x rotate_nohup.sh
添加 cron
定時任務:
crontab -e
添加以下內容,每小時檢查并分割日志文件:
0 * * * * /path/to/rotate_nohup.sh
通過以上方法,你可以有效地管理 nohup
日志文件,防止其變得過大。選擇適合你需求的方法進行配置即可。