cronがsyslogをいっぱいにしないようにするにはどうすればよいですか?


31

毎分実行する必要があるスクリプトがあります。問題は、cronが/var/log/syslog実行されるたびにログを記録することです。私はこのようなものが何度も何度も繰り返されるのを見ることになり/var/log/syslogます:

Jun 25 00:56:01 myhostname /USR/SBIN/CRON[1144]: (root) CMD (php /path/to/script.php > /dev/null)

Debianを使用しています。

私の質問は次のとおりです。cronに毎回この情報をsyslogに書き込まないように指示する方法はありますか


1
Busyboxプラットフォームでこれを行う方法はありますか?/etc/syslog.confファイルのフォーマットは...異なっている
マークLakata

回答:


25

cronの出力を別のログ機能に送信して、/etc/syslog.confファイルに次を追加できます。

# Log cron stuff
cron.*                                                  /var/log/cron

忘れずに追加/var/log/cronして/etc/logrotate.d/syslog、回転するようにしてください。例えば

# /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

入力いただきありがとうございます。cron。* / var / log / cronを追加してcronを再起動しましたが、/ var / log / cronを空のままにしたまま、メッセージを/ var / log / syslogにダンプし続けます。確かなぜそれが何もしていないではない
user7321

1
ああ、私の側での大失敗。syslog.confを編集してcronを再起動していました!! それが機能しないのも不思議ではありません
。syslogを

1
cron.logを有効にしても、cronメッセージがsyslogに書き込まれるのを防ぐことはできません。
basic6

16

OK、

私の質問の解決策は次のとおりです。

変化する

*.*;auth,authpriv.none     -/var/log/syslog

*.*;cron,auth,authpriv.none     -/var/log/syslog

/etc/syslog.confでsyslogを再起動します

また/var/log/cron.log、デイブ・チェイニーが示唆したとおりにcronを送信し、logrotateを貼り付けました。Davesの提案による私の修正は、私の状況に最適です。

  1. /var/log/syslogcronメッセージで散らかるのを防ぎます
  2. まだcronメッセージが表示されます(トラブルシューティングに便利です)
  3. logrotateは/var/log/cron.log大きすぎないようにします。

7
最近のシステムを心配している人のためにrsyslog、Debian 8.0 Jessieにあるので、/etc/rsyslog.conf編集する必要があります。ところで、追加する文字列はデフォルトですでに存在しているため、コメントを外すだけで済みます(63行目)。また、パッケージメンテナがこのスレッドを読んだように、/var/log/cron.log既ににあり/etc/logrotate.d/syslogます。
TranslucentCloud

あなたの質問はでしたIs there any way I can tell cron not write this information to syslog every time。これは答えではありません。
NTD

@TranslucentCloudは、ubuntu 14 LTSのrsyslog設定が/etc/rsyslog.d/50-default.confにあることを追加したかっただけです。
ジョニー

8

/ 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行は「」です


このIMOは正しいソリューションです。ログレコードを生成しないでください。
NTD

4

Ubuntu 14.04.5(およびおそらく他の場所)には、syslogdの代わりにrsyslogdがあります。TranslucentCloudはこれをDebian Jessieでほのめかしましたが、同じソリューション(ただしsyslogd.confの代わりにrsyslog.confを変更する)はUbuntuで機能しないようです。

/etc/rsyslog.d/50-default.confに設定された値は、/ etc / rsyslog.confに設定されたものよりも実際に優先されるため、そこで変更を加えからrsyslogとcronを再起動することをお勧めします。そうしないと、syslogへのcronロギングに加えて、cronlog へのcronロギングのデフォルトの動作になります(排他的ではありません)。

/etc/rsyslog.d/50-default.confの最初の数行:

*.*;cron,auth,authpriv.none     -/var/log/syslog
cron.*                          /var/log/cron.log

そして出来上がり!


1
とてもいい答えです。とはいえ、Stack Overflowは非常に古いため、今後Stack Overflowに参加するために、新しい質問に集中したい場合があります。
マゼラン

3

私はこれを別の方法で解決しましたが、私の目標はわずかに異なっていました。atrunが起動したときに生成されたcronログエントリを破棄して、ハードドライブがスリープ状態になり、5分ごとに起動しないようにしたかったのです。

syslog.conf内のログイベントのターゲットをパイプコマンドでプレフィックスすることでシェルコマンドにすることができるため、grepを使用して不要なものを破棄します。そう:

cron.*              | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log

調査していませんが、それらのログエントリがまだ必要な場合は、別のターゲットに送信することが可能であると考えています。


3

実際、「最良」(主張できる)ソリューションは、@ DaveCheneyが提案したこととuser7321 が最終的に何をしたか、さらに私が推奨する3番目のアクションの組み合わせです。

  1. syslogdがcron関連のログメッセージを/ var / log / syslogに追加しないようにする
  2. cronログメッセージがどこか(具体的には、/ var / log / cron)に記録されるようにし、cronログのログローテーションを確実にします。
  3. syslogdが/ var / log / messagesにもcron関連のログメッセージを追加しないようにします

/etc/syslog.conf、これらの提案の組み合わせは次のように変更されます。

*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;daemon.none;mail,news.none       -/var/log/messages

に:

cron.*                                              /var/log/cron.log
*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;cron,daemon.none;mail,news.none  -/var/log/messages

また、次のコマンドを使用して、cronサービスとsyslogdサービスの両方を強制的に再ロード(または再起動)することを忘れないでください。

/etc/init.d/syslogd force-reload
/etc/init.d/cron force-reload

注:これはrsyslogdでも機能します。


最良の解決策は、@ dfcが提案したものです。つまり、最初にログを生成しないでください。
NTD
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.