2013-08-21 86 views
4

我在crontab中放置了一個作業,每隔2小時運行一次,同時我也希望將我的bash輸出的日誌文件放在單獨的文件中。如何在crontab中使用tee命令

輸入:

0 0-23/2 * * * /tmp/sample.sh | tee /tmp/logfile_extract_$(date '+%Y-%m-%d-%H').txt 

輸出:你爲什麼要在cron作業使用tee

/bin/sh: -c: line 0: unexpected EOF while looking for matching `'' 
/bin/sh: -c: line 1: syntax error: unexpected end of file 
+3

'0-23/2'語法可以通過'*/2'這是比較標準所取代。 – fedorqui

回答

1

。爲了重定向輸出,你可以這樣做:

0 */2 * * * /tmp/sample.sh > /tmp/logfile_extract_$(date '+%Y-%m-%d-%H').txt 2>&1 

tee需要您的TTY顯示輸出,並沒有可與一個cron TTY。

man tee

The tee utility copies standard input to standard output, making a copy in zero or more files.

+0

作業未運行,我在cron日誌中再次得到相同的錯誤: /bin/sh:-c:第0行:尋找匹配的'''時意外的EOF /bin/sh:-c:第1行:語法錯誤:意外的文件結尾 –

+0

首先在命令行上運行'/tmp/sample.sh> /tmp/logfile_extract_$(date'+%Y-%m-%d-%H').txt 2>&1' – anubhava

+0

在命令行上運行完美。 –

1

從你的上述評論

/tmp/logfile_extract_$(date '+%Y-%m-%d-%H').txt 

是問題 1)/ bin/sh的其實bash的?我已經看到了操作系統的'更像什麼東西',因此bash特定的語法可能會拋出它。

0 */2 * * * /bin/bash -c '/tmp/sample.sh > /tmp/logfile_extract_$(date "+%Y-%m-%d-%H").txt 2>&1' 

可能在這種情況下工作。或者你可以考慮反引號標記或從cron稱爲包裝腳本,只是做了

/tmp/sample.sh > /tmp/logfile_extract_$(date "+%Y-%m-%d-%H").txt 2>&1 
2

的百分比(%)符號是在cron一個特殊字符。轉義%符號。

0 0-23/2 * * * /tmp/sample.sh > /tmp/logfile_extract_$(date '+\%Y-\%m-\%d-\%H').txt 2>&1 
2

完美的理由要這樣。如果您願意,您可以完全使用tee,但仍然可以將輸出捕獲到MAILTO。拿這個的crontab例如

SHELL=/bin/bash 
[email protected] 
0 */2 * * * php /path/script.php | tee -a /path/log.$(date +"\%Y-\%m-\%d").txt 

注意什麼拉爾斯說,逃離那些百分號(%