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


198

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

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

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

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

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


毎日6時25分に?これらは/etc/cron.daily/からのスクリプトです。メールを送信しようとしているのは人気コンテストだけです。スクリプトを調べて、どのスクリプトがメールを送信しようとしているのかを確認しますか?それはそれを絞り込む必要があります。次に、「chmod 0644 /etc/cron.daily/script-name」を実行して実行を防ぎます。

回答:


173

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

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

sudo apt-get install postfix

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


5
postfixをインストールするのは良いことですか?どのMTAが最も使いやすいですか?
エンドリス

2
Postfixは、Linux用の最も広く使用されているメールサーバーでそれに固執
Rápliアンドラーシュ

5
インストール手順中にcronで使用する場合(つまり、実際に外部に電子メールを送信したくない場合)は、ローカルでのみ使用するように構成するように回答する必要があることに注意してください。
ステフェン

postfixにより良い方法が組み込まれている場合、メールをチェックする唯一の方法は(debian)mailによって提供されmailutilsますか?
ThorSummoner

79

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

sudo crontab -e

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

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

10
このアプローチの問題は、CPU使用率が高いことを説明していないことです。Cronは明らかにコミュニケーションを図ろうとしており、これは本質的に出力を無視しているだけです。有用なデバッグ情報がある場合に備えて、出力を破棄するよりも処理したいと思います。
オリ

1
Oli、これは古い質問ですが、同じ正確な問題が発生していますが、それはRaspberry PIにあります。No MTA installed, discarding outputログに大量のメッセージが表示され、最終的にプログラムが単独で実行を停止します。CPUスパイクのせいだと思います。この質問に投稿されたすべての答えは、それを無視しているようです。
-ThN

4
出力を保持するには、コマンドをスクリプトに入れ、stdoutとstderrをにパイプしloggerます。たとえば、yourCommand >/dev/null 2>&1 | logger -t mycmd。これにより、安全に保持するためにsyslogに出力が配置され、MTAの苦情が停止します。
CivMeierFan

56

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

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

sudo aptitude install postfix

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

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

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

<user>

「ルート」で。

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


3
仕事からのエラーを確認するためにメールボックスをチェックする方法についての追加コメントをありがとう!
スチュアートアレン

32

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

crontab -e

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

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

複数のコマンドがライン上にある場合は、で区切って;、  &&  または||あなたがこのように、各コマンドについては、上記を行う必要があります:

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

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

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

stdoutを無視してstderrのみをキャプチャする場合は、代わりに使用します。ログファイルは、ホームディレクトリ 、または保存する必要がないと確信している場合でも、必要な場所に保存してください。> /dev/null 2>> /some/log/file/var/log/tmp

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


28

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

MAILTO=""

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


4
(コメントを入れないでください#)後MAILTO=""またはそれが動作しません
SBF

23

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でそのメッセージが表示されるサーバーで行ったことです。


これを実行しましたが、ファイルにログは追加されません。
pir

cronジョブが実行されていることを確認しますか?
アンドリューマクノートン

はい、システムログはそれが開始されていることを示しています。
pir

1
stderrへの出力をファイルに取り込むには、行の最後に「2>&1」が必要です。
MattSmith

15

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

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

パイプはcronジョブで機能しますか?
CivMeierFan

10

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

ただし、エラーメールを送信するには、MTA(メール転送エージェント)をインストールする必要があります。Postfixは以下を使用してインストールするのに十分簡単です。sudo apt-get install postfix


私の知る限り、「> / dev / null」はそれらを送信するだけで、「> / dev / null 2>&1」はすべてのエラーを破棄しますか?ログにエラーを取得するために何を使用する必要がありますか?今はメールが届きません(欲しいのですが)が、見苦しい「MTAがありません…」
ピット

2
afaik、出力をログに記録する方法はありません。メールに送信する以外にありません。あなたができる最も近いことは、ローカルメール配信のためにpostfixを設定することです(「sudo apt-get install postfix」を実行すると、ローカル配信を設定するかどうかを尋ねられます。 ssh経由でログインするたびに、以前のジョブが失敗した場合、マシンに新しい電子メールが表示されるので、ログを確認するよりも便利であることが
わかり

2
  1. 最初にpostfix、問題を解決できるをインストールします

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

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

    MAILTO=root // current system user
    
  4. ときにcron任意のタスクを実行し、あなたは電子メールを取得します

    mail
    

1
あなたの答えは良いように思えますが、すべての指示を理解できませんでした。たぶんあなたはそれを改善することができます。
zx485


1

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

次に実行する

apt-get update

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

更新が必要です。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.