…生活與工作…個人的生活雜記….

syslog中不要顯示Crontab的CMD執行紀錄

Linux系統上在執行 Crontab 時,會將執行紀錄寫在 /var/log/syslog(或是/var/log/cron.log)中。如果有很多BOT或是定期執行的小程式時,往往就會看到log檔被標示為CMD的紀錄塞滿滿。像我的/var/log/cron.log中短短5分鐘就塞了20條CMD執行紀錄,幾乎每2天就快10M的log檔。

Jan  3 06:26:01 localhost CRON[15408]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:26:01 localhost CRON[15410]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:26:01 localhost CRON[15409]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:27:01 localhost CRON[15436]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:27:01 localhost CRON[15437]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:27:01 localhost CRON[15438]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:28:01 localhost CRON[15462]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:28:01 localhost CRON[15465]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:28:01 localhost CRON[15463]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:29:01 localhost CRON[15488]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:29:01 localhost CRON[15487]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:29:01 localhost CRON[15489]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:30:01 localhost CRON[15518]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:30:01 localhost CRON[15520]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:30:01 localhost CRON[15521]: (root) CMD ("---恕刪---" >/dev/null 2>&1)
Jan  3 06:30:01 localhost CRON[15522]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:30:01 localhost CRON[15523]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:31:01 localhost CRON[15560]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:31:01 localhost CRON[15561]: (root) CMD ("---恕刪---" > /dev/null 2>&1)
Jan  3 06:31:01 localhost CRON[15562]: (root) CMD ("---恕刪---" > /dev/null 2>&1)

那我們要如何選取我們需要的項目呢?可以先看看那個男人(man)的說明。

預設的等級是1,如果你都不要任何輸出就是0。

我是預設輸出執行指令(如restart list等)以及執行錯誤訊息,所以是8+4=12

OPTIONS
       -L loglevel
               Tell cron what to log about jobs (errors are logged regardless of this value) as the sum of the following values:
                   1      will log the start of all cron jobs
                   2      will log the end of all cron jobs
                   4      will log all failed jobs (exit status != 0)
                   8      will log the process number of all cron jobs
               The default is to log the start of all jobs (1). Logging will be disabled if levels is set to zero (0). A value of fifteen (15) will select all options.

我們只需要修改檔案 /etc/default/cron

並新增一行 EXTRA_OPTS=”-L 12″

# This file has been deprecated. Please add custom options for cron using
# $ systemctl edit cron.service
# or
# $ systemctl edit --full cron.service

EXTRA_OPTS="-L 12"     #增加這一行

儲存後並重啟服務即可

sudo systemctl restart cron && systemctl status cron

正確啟動之後會在cron.status中顯示

● cron.service - Regular background program processing daemon
   Loaded: loaded (/etc/systemd/system/cron.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/cron.service.d
           └─override.conf
   Active: active (running) since Tue 2021-01-05 09:40:41 CST; 8ms ago
     Docs: man:cron(8)
 Main PID: 30632 (cron)
   CGroup: /lxc/Wordpress/system.slice/cron.service
           └─30632 /usr/sbin/cron -f -L 12

然後在/var/log/syslog中也只會顯示必要的資訊了

Jan  5 09:40:41 localhost cron[30632]: (CRON) INFO (pidfile fd = 3)
Jan  5 09:40:41 localhost cron[30632]: (CRON) INFO (Skipping @reboot jobs -- not system startup)