2017-09-14 58 views
1

ack在linux中不使用crontab輸出。ack在linux中使用crontab不輸出任何內容

在crontab文件(sudo crontab -e編輯):

39 20 * * * /ext/test110.sh 

而且cat /ext/test110.sh將顯示

#! /bin/sh 

/usr/bin/ack "localhost" /etc/hosts > /ext/1.t 
which ack > /ext/2.t 

的cron後,有1.T 2.T並在/ext

cat 2.t將輸出/usr/bin/ack; 但是,沒有在1.t

如果我運行在bash ack "localhost" /etc/hosts > /ext/3.t(30年4月3日)或SH直接, 它將輸出:127.0.0.1 localhost

看來ack不能用cron的工作。錯誤在哪裏?謝謝。

uname -a

Linux xxx 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt25-2 (2016-04-08) x86_64 GNU/Linux 

ACK 2.14,Perl的5.20.2是/ usr/bin中/ perl的下運行

+0

不起作用。謝謝。 @Inian –

+0

做'哪個ack',然後把這個值用在你的腳本里面。也就是說,在腳本中使用'/ full/path/to/ack'。否則,將該值添加到PATH變量。我們每天都會問這類問題,請學習使用搜索功能。祝你好運。 – shellter

+0

@shellter,它不起作用。你的答案和Inian的一樣。謝謝。 「 –

回答

1

確認可能是拋出一個錯誤,但因爲你是唯一的管道你沒有看到stdout和錯誤被寫入std err。

作爲一條經驗法則,除非你有充分的理由不要在cron日誌中抓取stderr。

重定向與命令流:

[stream-no]>[destination] 

如果沒有流沒有給出bash將默認爲1對應於標準輸出,所以:

>/file == 1>/file 

您可以通過使用標準錯誤做標準錯誤file-no,2.發送stderr到文件:

2>/file 

您可以通過使用發送流到另一個& file-no作爲目的地。您可以將stderr發送到stdout與之相同的地方:

2>&1 

所以在你的腳本中試試這個。運行ack,將stderr發送到file-no 1以及stdout,然後將所有進入file-no 1的內容發送到日誌文件中。

/usr/bin/ack "localhost" /etc/hosts 2>&1 > /ext/1.t 

並檢查輸出。我敢打賭,你現在得到一些文本,很可能是一個你不能明智地修復的錯誤。

+0

使用'/ usr/bin/ack「localhost」/ etc/hosts 2>&1>/ext/1.t'不會改變任何內容。謝謝。你在你的Linux中測試過嗎?順便說一句,如果有錯誤,cron會發送一封郵件。但是,沒有收到任何電子郵件。 –

+0

是不是'...> log 2>&1'通常的表述?它曾經有所作爲;-)。否則,非常耐心解釋流重定向!祝你們好運。 – shellter

+0

不起作用,仍然@shelter。確切地說,流重定向被清楚地解釋。謝謝。 –

相關問題