Crontab+Shell做Nginx日志切割腳本實(shí)例代碼
平日里,我們需要把 Nginx 的錯(cuò)誤日志輸出到文件里,但是時(shí)間一長,文件就特別大,之前我服務(wù)器上日志就一周沒管它,今天一看日志文件都32個(gè)G了,大的嚇人。于是就寫了個(gè)日志切割的腳本。
原理
其實(shí)日志切割腳本的原理很簡單
- 先將原來的日志文件移動(dòng)到指定文件夾中
- 向 Nginx 發(fā)送 USR1 信號,讓 Nginx 重新加載配置文件 [如果不發(fā)送信號的話,nginx 還是會(huì)將日志寫到你移動(dòng)的文件里去
#!/bin/bash
LOGS_PATH=/home/wwwlogs
DATE=$(date +%Y-%m-%d)
TIME=$(date +%H)
if [ ! -d ${LOGS_PATH}/${DATE}]; then
mkdir ${LOGS_PATH}/${DATE}
fi
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/${DATE}/error_${TIME}.log
# 向 nginx 發(fā)送信號,讓其重新加載配置文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
上面的代碼其實(shí)挺簡單的,也就是按照日期生成文件夾,再將文件移動(dòng)到新的文件夾中,最后用 Kill 發(fā)送重新加載配置的信號。USR1 信號一般是用戶自定義信號,開發(fā)者可以自行定義如何處理該信號,在 Nginx 中就是重新加載了配置。
讓腳本在指定的時(shí)間里跑起來
說到定時(shí)任務(wù),在 Linux 里,沒有比 Crontab 更加大名鼎鼎了。下面簡單介紹下 Crontab 的使用。
啟動(dòng) crontab 服務(wù)
一般是 /sbin/service crond start
查看服務(wù)是否已經(jīng)運(yùn)行
$ ps -ax | grep cron
crontab 命令
crontab -u : 設(shè)定某個(gè)用戶的cron服務(wù),一般root用戶在執(zhí)行這個(gè)命令的時(shí)候需要此參數(shù)
crontab -l : 列出某個(gè)用戶cron服務(wù)的詳細(xì)內(nèi)容 crontab -r : 刪除沒個(gè)用戶的cron服務(wù) crontab -e : 編輯某個(gè)用戶的cron服務(wù)
crontab 語法
| 分 | 小時(shí) | 日 | 月 | 星期 | 命令 |
|---|---|---|---|---|---|
| 0-59 | 0-23 | 1-31 | 1-12 | 0-6 | command |
幾個(gè)特殊符號的含義: - * 代表取之范圍內(nèi)的數(shù)字 - / 代表每 - - 代表從某個(gè)數(shù)字到某個(gè)數(shù)字 - , 分開幾個(gè)離散的數(shù)字
示例
| 分 | 小時(shí) | 日 | 月 | 星期 | 命令 | |
|---|---|---|---|---|---|---|
| 5 | * | * | * | * | ls | 指定每小時(shí)的第5分鐘執(zhí)行一次ls命令 |
| 30 | 5 | * | * | * | ls | 指定每天的 5:30 執(zhí)行l(wèi)s命令 |
| 30 | 7 | 8 | * | * | ls | 指定每月8號的7:30分執(zhí)行l(wèi)s命令 |
| 30 | 5 | 8 | 6 | * | ls | 指定每年的6月8日5:30執(zhí)行l(wèi)s命令 |
| 30 | 6 | * | * | 0 | ls | 指定每星期日的6:30執(zhí)行l(wèi)s命令[注:0表示星期天,1表示星期1 |
| 30 | 3 | 10,20 | * | * | ls | 每月10號及20號的3:30執(zhí)行l(wèi)s命令[注:“,”用來連接多個(gè)不連續(xù)的時(shí)段] |
| 25 | 8-11 | * | * | * | ls | 每天8-11點(diǎn)的第25分鐘執(zhí)行l(wèi)s命令[注:“-”用來連接連續(xù)的時(shí)段] |
| */15 | * | * | * | * | ls | 每15分鐘執(zhí)行一次ls命令 [即每個(gè)小時(shí)的第0 15 30 45 60分鐘執(zhí)行l(wèi)s命令 ] |
| 30 | 6 | */10 | * | * | ls | 每個(gè)月中,每隔10天6:30執(zhí)行一次ls命令[即每月的1、11、21、31日的6:30執(zhí)行一次ls 命令。 ] |
| 50 | 7 | * | * | * | root run-parts /etc/cron.daily | [ 注:run-parts參數(shù)表示,執(zhí)行后面目錄中的所有可執(zhí)行文件。 ] |
用 crontab 執(zhí)行我們的腳本
簡單的了解了下 crontab 后,可以開始用 crontab 來定時(shí)執(zhí)行我們的腳本了。
用 crontab -e 打開編輯器
在編輯器中輸入下面內(nèi)容:
59 23 * * * /home/nginx-cut.sh
上面的意思是,每天的23:59分開始執(zhí)行腳本。 - 保存文件,然后用 crontab -l 就可以看到我們添加的定時(shí)任務(wù)了
這里需要注意的是,nginx 需要 root 權(quán)限向它發(fā)送信號,所以需要在 root 下執(zhí)行 crontab -e
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用Nginx進(jìn)行URL轉(zhuǎn)發(fā)的配置案例
Nginx是一個(gè)高性能的Web服務(wù)器和反向代理服務(wù)器,它還可以用于URL轉(zhuǎn)發(fā),在本教學(xué)文章中,我們將從安裝Nginx開始,逐步介紹配置步驟,并展示一個(gè)URL轉(zhuǎn)發(fā)的案例,感興趣的朋友可以參考下2023-09-09
nginx 內(nèi)置變量詳解及隔離進(jìn)行簡單的攔截
這篇文章主要介紹了nginx 隔離進(jìn)行簡單的攔截詳解的相關(guān)資料,這里對nginx內(nèi)置變量進(jìn)行了簡單的介紹并對隔離攔截進(jìn)行了詳解, 需要的朋友可以參考下2016-12-12
nginx設(shè)置上傳目錄無執(zhí)行權(quán)限的方法
在windows+iis下,可以設(shè)置上傳目錄,類似:upload,uploadfile,attachments,這樣的目錄下面無腳本執(zhí)行權(quán)限,從而防止非法用戶上傳腳本得到webshell2010-11-11
nginx?gzip?動(dòng)態(tài)靜態(tài)壓縮詳解
這篇文章主要為大家介紹了nginx?gzip?動(dòng)態(tài)靜態(tài)壓縮實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
nginx的keepalive相關(guān)參數(shù)使用源碼解讀
這篇文章主要為大家介紹了nginx的keepalive相關(guān)參數(shù)使用源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Nginx編譯參數(shù)大全 configure參數(shù)中文詳解
這篇文章主要介紹了Nginx編譯參數(shù)大全,Nginx configure參數(shù)中文詳解,需要的朋友可以參考下2014-04-04
解決nginx服務(wù)器上發(fā)布的新版本代碼總需要清除瀏覽器緩存問題
這篇文章主要介紹了解決nginx服務(wù)器上發(fā)布的新版本代碼總需要清除瀏覽器緩存問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01

