概要
cronで実行したスクリプトやコマンドの出力内容をsyslogに転送する方法について記載します。
以下のOSで確認を行いました。
# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
設定方法
crondに-sオプションを指定します。
以下URLより抜粋
https://linux.die.net/man/8/crond
-s This option will direct Cron to send the job output to the
system log using syslog(3). This is useful if your system
does not have sendmail(8), installed or if mail is
disabled.
crondの起動オプションに-sを追加します。
# vi /etc/sysconfig/crond
CRONDARGS=-s
crondをsystemctlで再起動します。
# systemctl restart crond
動作確認
1分毎にdateコマンドを実行するcronジョブを追加します。
# 1分毎にdateコマンドを実行
*/1 * * * * date
ログを確認します。dateコマンドの実行結果が1分毎に出力されます。
# tail -f /var/log/cron
Apr 9 19:33:01 node1 CROND[1379]: (root) CMD (date)
Apr 9 19:33:01 node1 CROND[1376]: (root) CMDOUT (2021年 4月 9日 金曜日 19:33:01 JST)
補足
/var/log/cronにメッセージが出力されない場合は、
rsyslogの以下のような設定が有効になっているか確認します。
# vi /etc/rsyslog.conf
# Log cron stuff
cron.* /var/log/cron
/etc/sysconfig/crondに指定したオプションはcrondのサービスファイルから読み込まれます。
# vi /usr/lib/systemd/system/crond.service
[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
参考にしたURL
おわりに
cronで実行したスクリプトのログをsyslogで管理したい場合に使っていきたいと思います。