cron ジョブは /dev/stdout として印刷されます。

cron ジョブは /dev/stdout として印刷されます。

/dev/stdoutに出力を印刷するジョブを設定したいのですが、cronはそれを傍受して電子メールを送信しています。

crontab -l
*/1 * * * * echo "hiccup" >> /dev/stdout 2>&1

メッセージは次のとおりです。

21   │ From [email protected]  Tue May 21 11:13:00 2019
22   │ Return-Path: <[email protected]>
23   │ X-Original-To: xxx
24   │ Delivered-To: [email protected]
25   │ Received: by ltus423288.na.yyy.com (Postfix, from userid 501)
26   │     id EE6752E98EF; Tue, 21 May 2019 11:13:00 +0200 (CEST)
27   │ From: [email protected] (Cron Daemon)
28   │ To: [email protected]
29   │ Subject: Cron <xxx@ltus423288> echo "hiccup" >> /dev/stdout 2>&1
30   │ X-Cron-Env: <SHELL=/bin/sh>
31   │ X-Cron-Env: <PATH=/usr/bin:/bin>
32   │ X-Cron-Env: <LOGNAME=xxx>
33   │ X-Cron-Env: <USER=xxx>
34   │ X-Cron-Env: <HOME=/Users/xxx>
35   │ Message-Id: <[email protected]>
36   │ Date: Tue, 21 May 2019 11:13:00 +0200 (CEST)
37   │ Status: O
38   │
39   │ hiccup

私はstdoutからすべてを取得するようにFluiddを設定したので、cronを使用してジョブログをそこに送信することを好みます。 /dev/stdoutにあるシンボリックリンクファイルに書き込もうとしましたが、うまくいきませんでした。メールの送信を無効にしてcronに/ var / log / syslogに書き込むように指示すると(そして/ dev / stdoutへのシンボリックリンクを作成すると)、cronは無限ループに陥ります。

答え1

cronの目的は、端末なしでコマンドを実行することです。これは、端末が標準出力として印刷できないことを意味します。だからメールで送りました。

出力を削除できます。

*/1 * * * * echo "hiccup" >> /dev/null 2>&1

ジョブの標準出力をプログラムにパイプできます。たとえば、loggersyslogデーモンに送信できます。

*/1 * * * * echo "hiccup" | logger -t mycronjob 2>&1

またはファイルにリダイレクトします。

*/1 * * * * echo "hiccup" >> /var/tmp/some_file 2>&1

しかし、簡単なこともあります。端末なしcron ジョブは標準出力を次に送信できます。

答え2

cron「ヘッドレス」作業が可能なので/dev/stdout(そしてあなたがecho考えるすべてが言葉にはなりません)。これがメッセージをキャプチャしてメールを送信する理由です。

ただし、他のソフトウェアで使用するために通常のファイルに書き込むように指示することはできます。あなたはこれを行うことができます出力リダイレクト(実行コマンドの後> somefileまたは>> somefile後)許可された回答の例に示すように:

*/1 * * * * echo "hiccup" >> /var/tmp/some_file 2>&1

関連情報