解讀crontab腳本錯(cuò)誤日志和正確的輸出寫入到文件
crontab腳本錯(cuò)誤日志和正確的輸出寫入到文件
如果crontab不重定向輸出,并且crontab所執(zhí)行的命令有輸出內(nèi)容的話,是一件非常危險(xiǎn)的事情。
因?yàn)樵撦敵鰞?nèi)容會(huì)以郵件的形式發(fā)送給用戶,內(nèi)容存儲(chǔ)在郵件文件
/var/spool/mail/$user
如果命令執(zhí)行比較頻繁(如每分鐘一次),或者命令輸出內(nèi)容較多,會(huì)使這個(gè)郵件文件不斷追加內(nèi)容,文件越來越大。
而郵件文件一般存放在根分區(qū),根分區(qū)一般相對(duì)較小,所以會(huì)造成根分區(qū)寫滿而無法登錄服務(wù)器。
不輸出內(nèi)容
*/5 * * * * /root/XXXX.sh &>/dev/null 2>&1?
將正確和錯(cuò)誤日志都輸出到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log 2>&1 &
只輸出正確日志到 /tmp/load.log
*/1 * * * * /root/XXXX.sh > /tmp/load.log & ?等同于 ? */1 * * * * /root/XXXX.sh 1>/tmp/load.log &
只輸出錯(cuò)誤日志到 /tmp/load.log
*/1 * * * * /root/XXXX.sh 2> /tmp/load.log &?
名詞解釋
在shell中,每個(gè)進(jìn)程都和三個(gè)系統(tǒng)文件相關(guān)聯(lián):標(biāo)準(zhǔn)輸入stdin,標(biāo)準(zhǔn)輸出stdout和標(biāo)準(zhǔn)錯(cuò)誤stderr,三個(gè)系統(tǒng)文件的文件描述符分別為0,1和2。所以這里2>&1的意思就是將標(biāo)準(zhǔn)錯(cuò)誤也輸出到標(biāo)準(zhǔn)輸出當(dāng)中。
> 就相當(dāng)于 1> 也就是重定向標(biāo)準(zhǔn)輸出,不包括標(biāo)準(zhǔn)錯(cuò)誤。
通過2>&1,就將標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出了(stderr已作為stdout的副本),那么再使用>重定向就會(huì)將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤信息一同重定向了。
如果只想重定向標(biāo)準(zhǔn)錯(cuò)誤到文件中,則可以使用2> file。
crontab重定向錯(cuò)誤日志 加上時(shí)間
在開發(fā)中,我們避免不了寫crontab腳本來異步執(zhí)行一些東西,一般設(shè)置crontab用下面的方法
*/1 * * * * commond > /tmp/t.log 2>&1
后面的 2>&1 代表把標(biāo)準(zhǔn)錯(cuò)誤輸出指向標(biāo)準(zhǔn)輸出,意思是當(dāng)commond異常退出時(shí),把異常退出時(shí)的日志也寫到 /tmp/t.log 下面,這時(shí)記錄的日志是沒有時(shí)間信息的,就是說日志里的數(shù)據(jù)沒有辦法知道是什么時(shí)候打印出來的。
下面通過一個(gè)shell來解決這件事,代碼如下
#!/bin/bash
if [ $# -gt 1 ]; then
?? ?istring=''
?? ?#去掉回車
?? ?date=`date | tr -s ["\n"]`
?? ?for (( i = 2; i <= $#; i++ ))
?? ?do
?? ??? ?string=$string" "${!i}
?? ?done?? ?
?? ?c=$date": "$string
?? ?echo "" >> $1
?? ?echo $c >> $1
fi把上面的代碼放到根目錄下,保存為 datecrontalog.sh
然后在crontab -e用下面的腳本代替
*/1 * * * * ?commond 2>&1 | xargs $HOME/datecrontalog.sh /tmp/t.log
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
LINUX啟動(dòng)/重啟/停上MYSQL的命令(詳解)
下面小編就為大家?guī)硪黄狶INUX啟動(dòng)/重啟/停上MYSQL的命令(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
PHP程序員玩轉(zhuǎn)Linux系列 使用supervisor實(shí)現(xiàn)守護(hù)進(jìn)程
這篇文章主要為大家詳細(xì)介紹了PHP程序員玩轉(zhuǎn)Linux系列文章,使用supervisor實(shí)現(xiàn)守護(hù)進(jìn)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
在Linux服務(wù)器上部署War項(xiàng)目教程
文章講述了如何將War包上傳到Linux服務(wù)器上的步驟,包括使用FTP或SFTP上傳,確認(rèn)并安裝Java運(yùn)行環(huán)境和Web服務(wù)器(如ApacheTomcat或Nginx),將War包復(fù)制到相應(yīng)的目錄,并重啟服務(wù)以確保部署成功,最后,通過瀏覽器訪問部署的應(yīng)用2025-02-02

