linux crontab添加log ,及2>&1 添加時間戳

默認情況下,使用
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. 使用moreutilsts (本人推薦,簡單明瞭)

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 )

參考文獻:

  1. shell - How to add timestamp to STDERR redirection - Stack Overflow
  2. Linux Shell 1>/dev/null 2>&1 含義
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章