2012-04-20 166 views
0

我對cron有某種學習方式,不管我讀什麼,我都無法理解它。我向我的webhost尋求幫助以創建一個每兩小時運行一次python腳本的cron作業。這個cronjob做了什麼?

這是他送回去:

0 */2 * * * python /path/to/file.py >> /dev/null 2>&1 

我得到的第一位是說大家小時由兩個整除,第二部分是用Python來執行我的文件,剩下的,我不真的不知道。

支持傢伙給我發了一封電子郵件,回話說

這意味着,輸出和錯誤將無處重定向到保持 你乾淨亂碼信息,然後將命令輸出在cron如果有(有益和 共同)。

要測試腳本功能,請在不重定向的情況下使用相同的功能。

這是有道理的,因爲我記得>>在命令提示符下被用來輸出寫入文件。我仍然沒有得到兩件事。首先,2>&1是做什麼的?第二,通過重定向,他是在說發送輸出到/dev/null?如果它沒有去那裏,我確實想確認它正在工作,它會去哪裏?

+0

請閱讀:http://en.wikipedia.org/wiki/File_descriptor(這將解釋0,1,2)另外,如果你想看到輸出重定向到一個文件,例如:/ tmp /somefile.log – 2012-04-20 17:23:56

回答

2

2代表stderr流,它表示將它重定向到流1(stdout)定向的相同位置,即/dev/null(有時稱爲「位桶」)。

如果你不希望輸出到/dev/null,那麼你可以在那裏放一個文件名,並且stderr和stdout的輸出將會在那裏。

例:

0 */2 * * * python /path/to/file.py >> your_filename 2>&1 

最後,>>(相對於>)指追加,所以在文件名的情況下,輸出將附加的,而不是覆蓋該文件。與/dev/null,雖然你無論如何都扔掉輸出,這並不重要。

+1

太棒了,謝謝。 – mowwwalker 2012-04-20 17:26:17

2

2>&1會將所有錯誤輸出相同的流作爲標準輸出(例如,在你的情況下/dev/null =無處)

如果你在一個控制檯窗口中運行python /path/to/file.py(如去除輸出重定向開始>>)的輸出將打印在您的控制檯上(以便您可以直觀地讀取它)

注意:默認情況下,cron作業的輸出將作爲電子郵件發送給擁有作業的用戶。出於這個原因,總是將標準和錯誤輸出指向/dev/null是很常見的。

+0

根據我的經驗,'cron'作業通常不會輸出到'/ dev/console'。 – 2012-04-20 17:27:47

+0

在控制檯窗口中添加關於運行命令的簡短說明(輸出在控制檯中可見)和cron作業輸出以電子郵件形式發送 – erikxiv 2012-04-20 17:29:56

0

>>將標準輸出附加到/dev/null; 2>&1將文件描述符2(標準錯誤)發送到文件描述符1(標準輸出)正在進行的相同位置。

追加是不尋常的,但實際上並不有害;你通常只會寫>。如果你正在處理的是真實文件而不是/dev/null,那麼附加效果可能會更好,因此這會減少從/dev/null更改爲/tmp/cron/job.log或其他任何內容時遇到問題的可能性。

拋出錯誤並不一定是個好主意,但是如果該命令是「健談」,那麼該輸出通常會以電子郵件的形式發送給工作的用戶。

1
  • >>是不必要存在 - 的/ dev/null是不是一個真正的文件,它不會不管你是否使用>>>
  • 2>&1方式發送到STDERR相同的地方標準輸出,即/ dev的/ null
  • The man page for cron解釋瞭如果您沒有重定向,它會做什麼;一般來說,它會向輸出的管理員發送電子郵件。
  • 如果你想檢查它是否工作,你可以用'say'/ tmp/log'替換'/ dev/null',然後檢查該文件。這就是爲什麼在這個命令中有一個>>:當記錄到一個真實文件時,你想要追加每一次而不是覆蓋它。