/ dev / null /へのcronジョブを完全に消音するにはどうすればよいですか?


72

Ubuntuデスクトップとdebianサーバーには、毎分実行する必要があるスクリプト(私のスペースオンラインbrowsergameの分ティックを呼び出すスクリプト)があります。

問題は、debian派生ではcronが/var/log/syslog実行するたびにログを記録することです。私はそれが繰り返し実行されたメッセージを繰り返し見ることになります/var/log/syslog

Nov 11 16:50:01 eclabs /USR/SBIN/CRON[31636]: (root) CMD (/usr/bin/w3m -no-cookie http://www.spacetrace.org/secret_script.php > /dev/null 2>&1)

プログラムの出力を抑制するために/dev/null、たとえば、プログラムからすべてのエラーおよび警告メッセージを隠すためにリダイレクトできることを知っています。このようにcrontabに行を作成できます。

* * * * *       root    /usr/local/sbin/mycommand.sh > /dev/null

しかし、私はcronジョブを実行し、生成されたすべての出力またはエラーがNULLにパイプされることを確認したいので、syslogでメッセージを生成せず、電子メールを生成しません


編集:
cronログを変更して、ここで提案されているような別のログにリダイレクトするソリューションがあります/etc/syslog.conf

しかし、欠点は、すべてのcronjobのすべての出力がリダイレクトされることです。

どういうわけか、単一のcronjobを個別のログファイルにリダイレクトすることはできますか?できれば、cron.hourlyファイル自体の内部で構成可能です。


2
MAILTO=""cronファイルの先頭に置くこともできます。これにより、すべてのメールが抑制されます。また、ジョブ出力をsyslogに送信するcronデーモンについて聞いたことがありません(可能性があると思います)。
パトリック

@Patrick-すべてを無効にします。これは問題ないかもしれませんが、注意してください。私のアップデートをご覧ください。複数のmAILTOを設定できます。
slm

はい、MAILTO=""crontabの1行目はメールをブロックします。また、すべての出力を抑制している場合は、コマンドラインで完全な三連文字を使用します。3種類すべてがこの文字列によってリダイレクトされ >/dev/null 2>&1 ます。
–SDsolar

回答:


119

次の行を作成します。

* * * * *       root    /usr/local/sbin/mycommand.sh > /dev/null 2>&1

これにより、STDOUT(1)とSTDERR(2)の両方がキャプチャされ、に送信され/dev/nullます。

MAILTO

また、電子メールを設定してリセットすることにより、電子メールを無効にすることもできます。これにより、電子メールの送信が無効になりますMAILTO=""

MAILTO=""
* * * * *       root    /usr/local/sbin/mycommand.sh > /dev/null 2>&1

MAILTO="admin@somedom.com"
 * * * * *      root    /usr/local/sbin/myothercommand.sh

追加のメッセージ

多くの場合、次のタイプのメッセージが表示されます/var/log/syslog

Nov 11 08:17:01 manny CRON[28381]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

これらは、cronjobsのディレクトリが実行されたという、cronを介した単なる通知です。このメッセージは、これらのジョブとは直接関係ありません。代わりに、crondデーモンから直接送信されます。これらについて実際にできることは何もありません。これらcrondはログを介して行われる唯一のウィンドウなので、これらを無効にしないことをお勧めします。

それらが非常に迷惑な場合は、いつでも別のログファイルに転送して、/var/log/syslogファイルの/etc/syslog.conf設定ファイルを使用してファイルから取り出すことができますsyslog


@ rubo77-例を示してもらえますか?私はこれで動作していないものを見る必要があります。グーグルはこれを答えにしています:cyberciti.biz/faq/disable-the-mail-alert-by-crontab-command
slm

これはすべての出力と電子メールで機能しますが、/ var / log / syslogの各cron呼び出しごとに行を生成します
rubo77

@ rubo77-それは私があなたが尋ねているかもしれないと思ったことです。これらのメッセージを停止することはできません。それらはcrondデーモン自体によって生成されます。
slm

@ rubo77-変化することは承知していますが/etc/syslog.conf、これを代替とはほとんど考えません。それは単にログがダンプされるファイルを変更するか、cronメッセージを完全に無効にすることができます。あなたがしたいことをする方法はありません。
slm

1
@ rubo77-あなたが望むことをすることができる唯一の方法はgrep -v ...、の呼び出しの後にcrond
slm

10

毎分実行する必要があるスクリプトがあります。問題は、cronが実行されるたびに/ var / log / syslogにログを記録することです。/ var / log / syslogで繰り返し実行されたメッセージが繰り返し表示される

何を:あなたは何がこれを停止するようだので、それは尋ねる価値があるまさにこのスクリプトで、何を正確にあなたがsyslogに見メッセージはありますか?

slmの提案が機能しなかった場合、これは何かがsyslogに直接ログを記録しているためです-コメントの一部で暗示されているようにcron、またはcronによって実行されるプロセスのいずれかです syslogに送信されるメッセージは、stdinまたはstderrからのもので2>&1&>はないため、役に立ちません。

問題のアプリケーションの動作を設定する方法があるかもしれませんが、それが何であるかはわかりません。

確かに、最新のsyslog実装(いくつかあります)を構成して、メッセージを非常に具体的にフィルタリングする方法があります。たとえば、ログメッセージで使用される一意のタグがある場合、それをターゲットにできます。ただし、特定のメッセージや使用するsyslogdについては何もわからないため、推奨できる具体的なものは何もありません。

私の一般的なポイントは、「これによりすべてのメッセージがリダイレクトされる」ためにメッセージをリダイレクト/フィルタリングしたくない場合、フィルタリング技術を改良できるということです。 リンクしたサーバーフォールトスレッドは、施設(*.cron)によるフィルタリングに言及していますが、それよりも特殊なフィルターを構成できます


DebianとUbuntuの両方でrsyslogが利用可能です。debian 5+ではデフォルトのsyslogであり、ubuntuではオプションであるため、インストールする必要があります。ある種の特定のコンテンツを対象とするフィルターを作成するには、これをの最上部近く(つまり、他のルールの前、ただし一般的な構成、モジュールの読み込みなどの後)に配置し/etc/rsyslog.confます。これを行う最善の方法は、rsyslog.confそれ自体を編集するのではなく、/etc/rsyslog.conf.d/ディレクトリにファイルを作成することです。名前は50未満の2桁で始まり/etc/rsyslog.conf.d/15-my-filter.confます。次のようなものを配置できます。

:msg, contains, "/usr/bin/w3m -no-cookie" /dev/null

これにより、メッセージが送信されます/dev/null(または、必要に応じて別のログが送信されます)。ただし、メッセージは引き続き、に送信する後続のルールを介して渡され/var/log/syslogます。それを防ぐには:

& stop

他の行の直後。これにより、前のルールに一致したものはすべて破棄されます。または、単一行ルールの場合はstop、そのルール行の最後に追加するだけです。

rsyslogd設定を変更した後、再起動する必要があります(例systemctl restart rsyslog:systemdシステム):

kill -HUP $(cat /var/run/rsyslogd.pid)

HUPにより、デーモンは自動的に再起動します。


~現在、rsyslog は非推奨であり、に置き換える必要がありますstop。また、rsyslogd.confファイル内の位置も重要です。したがって、rsyslogの場合は単純に使用します:msg, contains, "/usr/bin/w3m -no-cookie" stop。そして、再起動しsudo systemctl restart rsyslogます。
フランク・ブライトリング

4

変化する /etc/default/cron

# Or, to log standard messages, plus jobs with exit status != 0:
# EXTRA_OPTS='-L 5'
#
# For quick reference, the currently available log levels are:
#   0   no logging (errors are logged regardless)
#   1   log start of jobs
#   2   log end of jobs
#   4   log jobs with exit status != 0
#   8   log the process identifier of child process (in all logs)
#
EXTRA_OPTS="-L 0"

デフォルトでは、EXTRA_OPTS行は""


2

リダイレクトすると/dev/null、コマンドからの出力が非表示になります。これを行わない場合、cronは出力をメールで送信します。コマンドからの出力がシステムログに記録されることはありません(少なくともcronが実行することによる)。

通常、出力を/dev/null、特にエラー出力にリダイレクトすることはお勧めできません。何か問題が発生した場合、問題を診断するための情報は得られません。メールを受信したくない場合は、ログファイルにリダイレクトします。

ただし、これは問題に関係ありません。引用するメッセージは、cron自体からのものです。Cronは、ジョブを実行するたびにログエントリを書き込みます。私が見たcronの実装では、ジョブごとに異なるロギング構成を使用できません。

一部のジョブを省略したい場合、唯一のオプションは、syslogデーモンのログメッセージにテキストフィルタリングを適用することです。syslogフィルタリングの事実上の標準は、syslogデーモンとしてrsyslog(システムのデフォルトである場合とそうでない場合があります)を実行することです。この特定のコマンドを除外する方法については、goldilocksの回答をご覧ください。

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