私のUbuntuデスクトップとDebianサーバーには、毎分実行する必要があるスクリプト(私の分を呼び出すスクリプト)があります。宇宙オンライン検索ゲーム)。
問題は、Debian 派生で/var/log/syslog
実行されるたびに cron ログが記録されることです。結局、次のようなメッセージが繰り返されるのがわかります/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
しかし、cronjobを実行し、生成された出力やエラーがNULLにパイプされ、システムログにメッセージや電子メールが生成されないようにしたいと思います。
編集:
cron-logを別々のログにリダイレクトするソリューションがありますここで提案されているように変更して/etc/syslog.conf
欠点は、すべてのcronjobのすべての出力がリダイレクトされることです。
単一のcronjobだけが別々のログファイルにリダイレクトできますか?cron.hourly
ファイル自体の内部で構成することをお勧めします。
答え1
次のようにラインを作成します。
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null 2>&1
その後、STDOUT(1)とSTDERR(2)がキャプチャされます/dev/null
。
メール送信
電子メールを設定してリセットして電子メールを無効にすることもできます。MAILTO=""
これにより、電子メールの送信が無効になります。
はい
MAILTO=""
* * * * * root /usr/local/sbin/mycommand.sh > /dev/null 2>&1
MAILTO="[email protected]"
* * * * * 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
答え2
1分ごとに実行する必要があるスクリプトがあります。問題は、cronが実行されるたびに/var/log/syslogに書き込まれることです。 /var/log/syslog で重複したメッセージが引き続き表示されます。
これを防ぐために何もしないようですので、次のように質問してみる価値があります。正確にこのスクリプトは何ですか?正確にシステムログに表示されるメッセージですか?
slmの提案がうまくいかないと、何かがsyslogに直接書き込まれるからです。あなたの意見のいくつかで提案されているように、cronまたは他のものです。cronによって実行されるプロセス。 syslogに送信されたメッセージはstdinまたはstderrからのものではないため、2>&1&>
役に立ちません。
関連アプリケーションの動作を設定する方法があるかもしれませんが、それが何であるかはわかりません。
メッセージを非常に具体的にフィルタリングするために、ほとんどの最新のsyslog実装(複数のものがある)を設定する方法は確かにあります。たとえば、ログメッセージに一意のタグが使用されている場合は、そのタグをターゲットとして指定できます。しかし、繰り返しますが、特定のメッセージやどのsyslogdを使用しているのかわからないので、特に推奨するものはありません。
私の一般的なポイントは、「これを行うとすべてのメッセージがリダイレクトされます」という理由でメッセージをリダイレクト/フィルタリングしたくない場合です。フィルタリング技術を向上させることができます。 リンクされたサーバー障害スレッドには施設固有のフィルタリング(*.cron
)のみが記載されていますが、より特殊なフィルタを設定できますそれに比べて。
DebianとUbuntuの両方がありますシステムログ書くことができる。 Debian 5+ではデフォルトのsyslog、Ubuntuではオプションなのでインストールする必要があります。特定のコンテンツのフィルタを作成するには、フィルタを中に入れます。上部付近(つまり、他のルールの前、一般的な設定、モジュールのロード後など)/etc/rsyslog.conf
。最善の方法は、ファイル自体を編集するのではなく、50未満の2桁の数字で始まる名前のrsyslog.conf
ファイルをディレクトリに作成することです。つまり、次のように入力できます。/etc/rsyslog.conf.d/
/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
設定を変更した後は、再起動が必要です(systemdシステムなどsystemctl restart rsyslog
)。
kill -HUP $(cat /var/run/rsyslogd.pid)
HUP によりデーモンはそれ自身を再起動します。
答え3
変化/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
ラインは""
答え4
/dev/null
隠しコマンドの出力をリダイレクトします。そうしないと、cronは出力をメールで送信します。このコマンドの出力はシステムログにまったく表示されません(少なくともcronはこれを行いません)。
一般に、出力、特にエラー出力をリダイレクトするのは悪い考えです/dev/null
。問題が発生した場合、問題を診断する情報はありません。メールを受信したくない場合は、ログファイルにリダイレクトしてください。
しかし、これらのどれもあなたの質問とは関係ありません。引用したメッセージはcron自体からのものです。 Cron はジョブを実行するたびにログエントリを作成します。私が見たクローンの実装では、さまざまなタスクにさまざまなログ設定を使用することはできません。
特定の操作を省略する場合、唯一のオプションは、syslogデーモンのログメッセージにテキストフィルタリングを適用することです。 syslogフィルタリングの事実上の標準は、以下を実行することです。システムログ(これはシステムのデフォルト値でもそうでないかもしれません。)syslogデーモンとして。バラよりゴールディラックスの答えこの特定のコマンドをフィルタリングする方法を学びます。