2016-04-06 75 views
9

我有一個cron作業,其輸出現在被重定向到一個文件中。它看起來像下面如何將cron作業輸出重定向到stdout

0 9 * * * /bin/sh /bin/cleanup.sh > /home/darkknight/cleanup.log

任何一個可以幫助我rediect其輸出到標準輸出?

+4

的可能的複製[如何重定向腳本的完整輸出(http://stackoverflow.com/questions/1887618/how-to-redirect-complete-output-of-a-script) – Bhavesh

+0

HTTP ://unix.stackexchange.com/questions/52330/how-to-redirect-output-to-a-file-from-within-cron – Bhavesh

+0

'cron'運行在shell的後臺,所以'stdout '你想把它重定向到? –

回答

1

在任何終端上輸入tty,我們將獲得設備文件,如/dev/pts/1。將cron作業重定向到此文件中爲 cleanup.sh > /dev/pts/1

+0

當您註銷或退出當前shell時,tty將變爲無效(關閉並可能稍後重新使用)。 –

1

運行cat /home/darkknight/cleanup.log然後您在STDOUT上獲得輸出。 如果你不能看到期望的輸出是什麼,也許你需要修改的cron如下:

0 9 * * * /bin/sh /bin/cleanup.sh > /home/darkknight/cleanup.log 2>&1

得到什麼cleanup.sh寫在它的STDERR。

如果你不想失去昨日的輸出,修改如下:

0 9 * * * /bin/sh /bin/cleanup.sh >> /home/darkknight/cleanup.log 2>&1

或者,只是執行/bin/sh /bin/cleanup.sh那麼你得到標準輸出和STDERR你的終端上。

13

運行進程具有PID,其fd(文件描述符)映射到/proc/<PID>/fd。我們可以在/var/run/crond.pid找到正在運行的cron進程的PID。

要將cron日誌發送到stdout,我們可以將日誌寫入由cron啓動的進程的fd編號1。

0 9 * * * /bin/sh /bin/cleanup.sh > /proc/$(cat /var/run/crond.pid)/fd/1 2>&1 
+0

這有什麼用?例如,在我的系統中,'/ usr/bin/cron'進程的stdout和stderr被定向到套接字。 –

+3

@KeithThompson我的場景是我使用運行cron服務的docker容器(使用'cron -f' make cron在前臺運行),並且因爲我想收集日誌以進行監視和分析。根據12個因子應用程序 - 「將日誌視爲事件流」,以便將cron日誌重定向到stdout。 – gaga5lala

+0

這實際上工作嗎?你能夠訪問寫入這些套接字的數據嗎? –

相關問題