2016-04-06 25 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'はシェルのバックグラウンドで実行されているので、' stdout 「出力をリダイレクトしたいですか? –

答えて

1

いずれの端末にもttyと入力してください。特定の端末ウィンドウのデバイスファイルは/dev/pts/1のようになります。このファイルにcronジョブを再作成します。 cleanup.sh > /dev/pts/1

+0

あなたの現在のシェルをログアウトまたは終了すると、その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を実行して、あなたの端末にSTDOUTとSTDERRの両方を取得します。

13

実行中のプロセスにはPIDがあり、そのfd(ファイル記述子)は/proc/<PID>/fdにマッピングされています。そして実行中のcronプロセスのPIDを/var/run/crond.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サービスを実行しているドッカーコンテナを使用しています(フォアグラウンドでcronを実行する 'cron -f'を使用します)。また、監視と分析のログを収集したいからです。 12ファクタappによると、 ''イベントストリームとしてのログを扱う 'ように、私はcronログをstdoutにリダイレクトします。 – gaga5lala

+0

実際に動作しますか?それらのソケットに書き込まれたデータにアクセスできますか? –

関連する問題