web-dev-qa-db-ja.com

cronジョブの出力をstdoutにリダイレクトする方法

Cronジョブがあり、その出力はファイルにリダイレクトされます。次のようになります

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

出力をstdoutに再編集するのを手伝ってくれる人はいますか?

16
shafeeq

任意の端末でttyと入力すると、/dev/pts/1などの特定のターミナルウィンドウのデバイスファイルが取得されます。 cronジョブをこのファイルにcleanup.sh > /dev/pts/1として再適用します

3
achoora

実行中のプロセスには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
31
gaga5lala

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の両方が取得されます。

0