Ubuntu 12.04.1 LTSの新規インストールと多数のサーバーがあります。
これらのサーバーでcronジョブを追加したり、crontabを編集したりしませんでしたが、各マシンでほぼ同時に、CPUスパイクが75%になり、スパイク時にsyslogに次の情報が表示されます。
CRON[8380]: (CRON) info (No MTA installed, discarding output)
モノコンプリートがインストールされており、サービススタックWebサーバーを実行しています。
これが起こるのを止める最良の方法は何ですか? CPUスパイクを削除できるようにしたいと思います。
Linuxは、メールを使用してユーザーに通知を送信します。ほとんどのLinuxディストリビューションには、メールサービス(MTAを含む)がインストールされています。 Ubuntuはそうではありません。
この問題を解決するために、たとえばpostfixなどのメールサービスをインストールできます。
Sudo apt-get install postfix
または、無視することもできます。 cronがメッセージを送信できないことは、CPUスパイク(cronが実行されている基礎となるジョブにリンクしている)と関係があるとは思わない。 MTAをインストールしてからメッセージを読むのが最も安全かもしれません(mutt
は優れたシステムメールリーダーです)。
これは、cronジョブが出力を生成し、cronデーモンがその出力を電子メール(つまり、root)で送信しようとするために発生します。その出力が必要ない場合、これを解決する最も簡単な方法は、crontabで破棄することです。
Sudo crontab -e
すべてのジョブに>/dev/null 2>&1
を追加します。
* * * * * yourCommand >/dev/null 2>&1
私の場合、メッセージはbashスクリプトのパーミッションの問題を暗示していましたが、MTAをインストールするまで表示されませんでした。
提案されたように、私は走った:
Sudo aptitude install postfix
セットアップ中にcronジョブを再度実行した後、「ローカル」を選択しました。
Sudo tail -f /var/mail/<user>
私の場合、私は交換しました
<user>
「ルート」で。
その後、アクセス許可に関連するエラー出力を確認できました。
前の回答で述べたように、これは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 * * * (cmd1; cmd2) >> / some/log/file 2>&1
Stdoutを無視してstderrのみをキャプチャする場合は、代わりに> /dev/null 2>> /some/log/file
を使用します。ログファイルは、ホームディレクトリ、/var/log
、または/tmp
のどこにでも保存できます。
次に、ジョブの実行後にログファイルを確認します。
Crontabで、これを最初の行として追加します。
MAILTO=""
これにより、cronが電子メールを送信しようとしなくなります。
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でそのメッセージが表示されるサーバーで行ったことです。
これは古い質問ですが、状況によっては役立つ追加の回答があります。
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
/dev/null 2>&1
をcronジョブコマンドに追加することの1つの副作用は、STDERR
とSTDOUT
(標準エラーおよび出力)の両方を破棄することです。 cronからの電子メールが必要ない場合、これは正常に機能します。ただし、エラーをメールで送信する場合は、代わりに>/dev/null
を使用してください。 詳細については、このブログ投稿をご覧ください 。
ただし、エラーメールを送信するには、MTA(メール転送エージェント)をインストールする必要があります。 PostfixはSudo apt-get install postfix
で簡単にインストールできます
最初に、postfix
をインストールします。これで問題を解決できます
Sudo apt-get install postfix
Ubuntuの場合、crontab
ファイルを編集できます
Sudo vim /etc/crontab
注意、最初の行のコードではなく、一番上のファイルを編集して、入力します
MAILTO=root // current system user
cron
がタスクを実行すると、メールが届きます
mail
Kitematic Docker toolsを使用してこの問題が発生しました。
magentoコンテナーに移動し、exe
をクリックします。
次に実行する
apt-get update
これは、magentoをkitematicで実行しようとしている場合です。ログには、仮想マシンで次のエラーが表示されます。
更新が必要です。
これであなたが迷子になったら申し訳ありませんが、それがどのように機能するかです。あなたは迷子になり続けますが、それについて読むだけで、いつかピースが一緒になります。我慢して。
crontab
ファイルの先頭でMAILTO=””
変数を設定できます。これにより、電子メールアラートも無効になります。 cronジョブを編集/開きます。
$ crontab -e
ファイルの先頭で、次を入力します。
MAILTO=""
https://www.cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command/