Bash

如何抑制 cron 守護程序發送到電子郵件的特定警告?

  • August 13, 2020

展示(或直接進入真正的問題部分)

我有一個 lynis 腳本,用於掃描我的伺服器。這個腳本並不重要,但無論如何這裡是腳本:https ://gitlab.com/sofibox/maxicron/-/blob/master/usr/local/maxicron/lynis/maxinis

該腳本執行完美,並且在通過終端手動執行時不會輸出任何錯誤:

./maxinis manual --cronjob

我還將收到有關掃描的電子郵件

但是,當我在特定時間通過 cronjob 執行此腳本時,如下所示:

06 21 * * *     root    /usr/local/maxicron/lynis/maxinis cron --cronjob > /dev/null

它也可以完美執行,發送一封電子郵件,但我收到了一封來自Cron Daemon的額外電子郵件,其中包含 3 個警告輸出,如下所示:

Cron 守護程序電子郵件

真正的問題在這裡:

我的問題是,根據上圖中的3條警告消息,我收到了 cron daemon 電子郵件警告。如何抑制警告的第二行並保留 Cron Daemon 發送的其餘輸出?

輸出的第二行是:

# Warning: iptables-legacy tables present, use iptables-legacy to see them

我嘗試grep -v在 crontab 中使用這種方法,但似乎不起作用:

06 21 * * *     root    /usr/local/maxicron/lynis/maxinis cron --cronjob > /dev/null | grep -v '# Warning: iptables-legacy tables present, use iptables-legacy to see them' 

不起作用的原因grep是消息將發送到stderr,而不是stdout,因此grep永遠不會看到它們。這就是為什麼即使在發送stdout/dev/null. 您可以像這樣過濾stderr

somecommand > /dev/null 2>( grep -v 'unwanted error' 1>&2 )

引用自:https://unix.stackexchange.com/questions/601097