默認情況下,使用
grep CRON /var/log/syslog
可以看到crontab的一些相關log,但是信息並不太多。你能看到crontab執行了哪個命令,但是看不到命令執行的輸出信息。
如果希望看到crontab中執行的腳本或命令的輸出信息及錯誤信息可以使用2>&1
將這些信息輸出到log文件。
首先解釋一下:
2>&1
我們知道>和<是文件重定向符。那麼1和2是什麼?
在shell中,每個進程都和三個系統文件 相關聯:標準輸入stdin
,標準輸出stdout
、標準錯誤stderr
,三個系統文件的文件描述符分別爲0
,1
,2
。所以2>&1
的意思就是將標準錯誤也輸出到標準輸出當中。
所以在crontab中如果0點0分執行一個命令(例如python ~/myscript.py
),需要看它的log可以這樣做:
0 0 * * * python ~/myscript.py > /tmp/myscript.log 2>&1
但是這樣默認是沒有時間戳
的,如果你想加上時間戳,有如下幾種方法:
1. 使用moreutils
的ts
(本人推薦,簡單明瞭)
sudo apt-get install moreutils
然後上述命令改寫爲:
0 0 * * * python ~/myscript.py 2>&1|ts > /tmp/myscript.log
2. 使用腳本
新建一個~/predate.sh
:
#!/bin/bash
while read line ; do
echo "$(date): ${line}"
done
那麼上述命令可以改爲:
0 0 * * * python ~/myscript.py 2> >( ~/predate.sh > /tmp/myscript.log )
3. 把predate.sh直接寫在命令行中:
0 0 * * * python ~/myscript.py 2> >( while read line; do echo "$(date): ${line}"; done > /tmp/myscript.log )
參考文獻: