平日里,我們需要把 Nginx 的錯誤日志輸出到文件里,但是時間一長,文件就特別大,之前我服務器上日志就一周沒管它,今天一看日志文件都32個G了,大的嚇人。于是就寫了個日志切割的腳本。
原理
其實日志切割腳本的原理很簡單
#!/bin/bashLOGS_PATH=/home/wwwlogs DATE=$(date +%Y-%m-%d) TIME=$(date +%H)if [ ! -d ${LOGS_PATH}/${DATE}]; then mkdir ${LOGS_PATH}/${DATE}fimv ${LOGS_PATH}/error.log ${LOGS_PATH}/${DATE}/error_${TIME}.log # 向 nginx 發送信號,讓其重新加載配置文件kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
上面的代碼其實挺簡單的,也就是按照日期生成文件夾,再將文件移動到新的文件夾中,最后用 Kill 發送重新加載配置的信號。USR1 信號一般是用戶自定義信號,開發者可以自行定義如何處理該信號,在 Nginx 中就是重新加載了配置。
讓腳本在指定的時間里跑起來
說到定時任務,在 Linux 里,沒有比 Crontab 更加大名鼎鼎了。下面簡單介紹下 Crontab 的使用。
啟動 crontab 服務
一般是 /sbin/service crond start
查看服務是否已經運行
$ ps -ax | grep cron
crontab 命令
crontab -u
: 設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數
crontab -l
: 列出某個用戶cron服務的詳細內容 crontab -r : 刪除沒個用戶的cron服務 crontab -e : 編輯某個用戶的cron服務
crontab 語法
分 | 小時 | 日 | 月 | 星期 | 命令 |
---|---|---|---|---|---|
0-59 | 0-23 | 1-31 | 1-12 | 0-6 | command |
幾個特殊符號的含義: - * 代表取之范圍內的數字 - / 代表每 - - 代表從某個數字到某個數字 - , 分開幾個離散的數字
示例
分 | 小時 | 日 | 月 | 星期 | 命令 | |
---|---|---|---|---|---|---|
5 | * | * | * | * | ls | 指定每小時的第5分鐘執行一次ls命令 |
30 | 5 | * | * | * | ls | 指定每天的 5:30 執行ls命令 |
30 | 7 | 8 | * | * | ls | 指定每月8號的7:30分執行ls命令 |
30 | 5 | 8 | 6 | * | ls | 指定每年的6月8日5:30執行ls命令 |
30 | 6 | * | * | 0 | ls | 指定每星期日的6:30執行ls命令[注:0表示星期天,1表示星期1 |
30 | 3 | 10,20 | * | * | ls | 每月10號及20號的3:30執行ls命令[注:“,”用來連接多個不連續的時段] |
25 | 8-11 | * | * | * | ls | 每天8-11點的第25分鐘執行ls命令[注:“-”用來連接連續的時段] |
*/15 | * | * | * | * | ls | 每15分鐘執行一次ls命令 [即每個小時的第0 15 30 45 60分鐘執行ls命令 ] |
30 | 6 | */10 | * | * | ls | 每個月中,每隔10天6:30執行一次ls命令[即每月的1、11、21、31日的6:30執行一次ls 命令。 ] |
50 | 7 | * | * | * | root run-parts /etc/cron.daily | [ 注:run-parts參數表示,執行后面目錄中的所有可執行文件。 ] |
用 crontab 執行我們的腳本
簡單的了解了下 crontab 后,可以開始用 crontab 來定時執行我們的腳本了。
用 crontab -e 打開編輯器
在編輯器中輸入下面內容:
59 23 * * * /home/nginx-cut.sh
上面的意思是,每天的23:59分開始執行腳本。 - 保存文件,然后用 crontab -l 就可以看到我們添加的定時任務了
這里需要注意的是,nginx 需要 root 權限向它發送信號,所以需要在 root 下執行 crontab -e
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答