web-dev-qa-db-ja.com

syslogの「(CRON)情報(MTAがインストールされていない、出力を破棄)」エラー

Ubuntu 12.04.1 LTSの新規インストールと多数のサーバーがあります。

これらのサーバーでcronジョブを追加したり、crontabを編集したりしませんでしたが、各マシンでほぼ同時に、CPUスパイクが75%になり、スパイク時にsyslogに次の情報が表示されます。

CRON[8380]: (CRON) info (No MTA installed, discarding output)

モノコンプリートがインストールされており、サービススタックWebサーバーを実行しています。

これが起こるのを止める最良の方法は何ですか? CPUスパイクを削除できるようにしたいと思います。

193
sungiant

Linuxは、メールを使用してユーザーに通知を送信します。ほとんどのLinuxディストリビューションには、メールサービス(MTAを含む)がインストールされています。 Ubuntuはそうではありません。

この問題を解決するために、たとえばpostfixなどのメールサービスをインストールできます。

Sudo apt-get install postfix

または、無視することもできます。 cronがメッセージを送信できないことは、CPUスパイク(cronが実行されている基礎となるジョブにリンクしている)と関係があるとは思わない。 MTAをインストールしてからメッセージを読むのが最も安全かもしれません(muttは優れたシステムメールリーダーです)。

170
martin

これは、cronジョブが出力を生成し、cronデーモンがその出力を電子メール(つまり、root)で送信しようとするために発生します。その出力が必要ない場合、これを解決する最も簡単な方法は、crontabで破棄することです。

Sudo crontab -e

すべてのジョブに>/dev/null 2>&1を追加します。

* * * * * yourCommand >/dev/null 2>&1
78
rob

私の場合、メッセージはbashスクリプトのパーミッションの問題を暗示していましたが、MTAをインストールするまで表示されませんでした。

提案されたように、私は走った:

Sudo aptitude install postfix

セットアップ中にcronジョブを再度実行した後、「ローカル」を選択しました。

Sudo tail -f /var/mail/<user>

私の場合、私は交換しました

<user>

「ルート」で。

その後、アクセス許可に関連するエラー出力を確認できました。

53
Martin Carstens

前の回答で述べたように、これはcronジョブが出力を生成しているために発生し、cronデーモンはその出力を電子メールで送信しようとします。 MTAをインストールしたくない(またはできない)が、出力を表示したい場合は、cronジョブの出力をログファイルにリダイレクトできます。でcrontabファイルを編集します

crontab -e

(問題がルートのcrontabにある場合はSudoを使用します)、次のようにすべてのコマンドの後に>> /some/log/file 2>&1を追加します。

0 3 * * * cmd  >> / some/log/file 2>&1

1行に複数のコマンドがあり、;&&、または||で区切られている場合、次のように各コマンドに対して上記を実行する必要があります。

0 3 * * * cmd1  >> / some/log/file 2>&1; cmd2  >> / some/log/file 2>&1

または、次のようにグループ化します。

0 3 * * * cmd1cmd2  >> / some/log/file 2>&1

Stdoutを無視してstderrのみをキャプチャする場合は、代わりに> /dev/null 2>> /some/log/fileを使用します。ログファイルは、ホームディレクトリ、/var/log、または/tmpのどこにでも保存できます。

次に、ジョブの実行後にログファイルを確認します。

31
G-Man

Crontabで、これを最初の行として追加します。

MAILTO=""

これにより、cronが電子メールを送信しようとしなくなります。

28
88weighed

MTAをインストールしたくない場合(現在のところ必要ありません)、cronジョブの結果をログファイルにパイプで送ることができます。

Sudo crontab -e

cronジョブでは次のようになります。

0 3 * * * /cmd/to/run >> /var/log/somelogfile.log

その後、ログを追跡して何が起こったかを見ることができます

Sudo tail -f -n 50 /var/log/somelogfile.log

これは、syslogでそのメッセージが表示されるサーバーで行ったことです。

22

これは古い質問ですが、状況によっては役立つ追加の回答があります。

Cronコマンドの出力をloggerにパイプして、syslogに出力されるようにします。

Postfixをインストールするよりも少し簡単で、この出力を他のログと一緒にsyslogに入れます。このコマンドはstdoutとstderrをキャプチャするので、No MTA installedメッセージは表示されず、syslogにすべての出力が表示されます。

Cronエントリの例:

0 3 * * * (cmd1;  cmd2) 2>&1 | logger -t mycmd

以下を使用して、タグmycmdでログを表示できます。

grep 'mycmd' /var/log/syslog
14
Michael Hunter

/dev/null 2>&1をcronジョブコマンドに追加することの1つの副作用は、STDERRSTDOUT(標準エラーおよび出力)の両方を破棄することです。 cronからの電子メールが必要ない場合、これは正常に機能します。ただし、エラーをメールで送信する場合は、代わりに>/dev/nullを使用してください。 詳細については、このブログ投稿をご覧ください

ただし、エラーメールを送信するには、MTA(メール転送エージェント)をインストールする必要があります。 PostfixはSudo apt-get install postfixで簡単にインストールできます

10
paneer_tikka
  1. 最初に、postfixをインストールします。これで問題を解決できます

    Sudo apt-get install postfix
    
  2. Ubuntuの場合、crontabファイルを編集できます

    Sudo vim /etc/crontab
    
  3. 注意、最初の行のコードではなく、一番上のファイルを編集して、入力します

    MAILTO=root // current system user
    
  4. cronがタスクを実行すると、メールが届きます

    mail
    
2
shahramlu

Kitematic Docker toolsを使用してこの問題が発生しました。
magentoコンテナーに移動し、exeをクリックします。

次に実行する

apt-get update

これは、magentoをkitematicで実行しようとしている場合です。ログには、仮想マシンで次のエラーが表示されます。

更新が必要です。

これであなたが迷子になったら申し訳ありませんが、それがどのように機能するかです。あなたは迷子になり続けますが、それについて読むだけで、いつかピースが一緒になります。我慢して。

1
Ali Bayati

crontabファイルの先頭でMAILTO=””変数を設定できます。これにより、電子メールアラートも無効になります。 cronジョブを編集/開きます。

$ crontab -e

ファイルの先頭で、次を入力します。

MAILTO=""

https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/

1