web-dev-qa-db-ja.com

cronジョブが実行されていない-postfix / sendmailエラー

ここに私のSudo crontab -eの内容があります

    @hourly /home/userName/ntpdate.sh

スクリプト(ntpdate.sh)//.25のコンテンツはntpサーバーです

     echo "Current time is $(date), " >> /home/userName/ntpdateLog.txt
     ntpdate -u 192.168.1.25 >> /home/userName/ntpdateLog.txt

コマンドを単独で実行するか、スクリプトを単独で実行すると、正常に機能し、ファイルに出力されます。スクリプトには、実行するための正しい許可があります。

/ var/log/syslogに表示されるエラーは次のとおりです。

    CRON[6386]: (root) MAIL (mailed 1 byte of output; but got status 0x004b, #012)
    postfix/sendmail[6410]: fatal: open /etc/postfix/main.cf: No such file or directory

スクリプトがメールを必要としないときにメールエラーが発生するのはなぜですか(私は知っています)。

Ntpdateが非推奨であることは知っていますが、今必要なことはそれだけです(cronを実行して実行できると仮定した場合)。

2
trueCamelType

cronマニュアル によると:

  When executing commands, any output is  mailed  to  the  owner  of  the
  crontab (or to the user named in the MAILTO environment variable in the
  crontab, if such exists)

メールアラートを停止する場合は、標準出力と標準エラーをリダイレクトする必要があります。

したがって、cronファイルを次のように変更する必要があります。

  @hourly /home/userName/ntpdate.sh >> /home/userName/ntpdateLog.txt 2>&1

あなたのスクリプト:

  echo "Current time is $(date), "
  ntpdate -u 192.168.1.25

これを行う別の方法は、cronファイルの先頭にあるMAILTO変数に空の値を与えることです。

  MAILTO=""
  @hourly /home/userName/ntpdate.sh >> /home/userName/ntpdateLog.txt 2>&1

エラーが発生した場合にスクリプトをデバッグする方が簡単なので、どのような場合でもstd出力とstdエラーをリダイレクトすることをお勧めします。

詳細は crontabマニュアル です。

6
Lety