カスタムで作ったログローテ設定ファイルを読み込んで
任意の時間でログローテーションしたくて
crontab -e(/var/spool/cron/root)に
logrotateコマンドを登録したら実行されなかったのでメモ
結果的には、logrotateコマンドをフルパスで指定することで解決しました。
Red Hat Enterprise Linux 8.3 (Ootpa)
Kernel: 4.18.0-240.el8.x86_64
logrotate 3.14.0
以下の設定でlogrotateコマンドをcrontabに登録
# crontab -l
0 1 * * * logrotate -f /root/rsyslog_custom.conf
したけど、なんだか動作してないっぽい
とりあえずログを確認
# tail /var/log/cron
Mar 26 10:55:01 servername CROND[86361]: (root) CMD (logrotate -f /root/rsyslog_custom.conf)
Mar 26 10:55:01 servername CROND[86338]: (root) CMDOUT (/bin/sh: logrotate: コマンドが見つかりません)
コマンドが見つからない?なんで??
調べてみたら、ログイン時に読み込まれる環境変数と
cron実行時に読み込まれている環境変数が異なるから、とのこと。
なるほど、PATHの変数の内容が違うのかな?
試しにcron実行されるときのPATHを確認
# crontab -e
0 1 * * * logrotate -f /root/rsyslog_custom.conf
## PATH変数を出力するコマンドを登録
0 11 * * * echo $PATH > /tmp/path.txt
cron実行される時のPATH
# cat /tmp/path.txt
/usr/bin:/bin
rootログイン時のPATH
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
logrotateコマンドのフルパス
# which logrotate
/usr/sbin/logrotate
なるほど、cron実行時のPATHに/usr/sbinがないから
そりゃ実行できないよね…
フルパス指定でcron登録を修正
# crontab -l
0 1 * * * /usr/sbin/logrotate -f /root/rsyslog_custom.conf
実行されているか確認
# tail /var/log/cron
Mar 26 11:06:01 servername CROND[86677]: (root) CMD (/usr/sbin/logrotate -f /root/rsyslog_custom.conf)
動いた!
cronって今までシェルスクリプトの登録くらいしかしてなかったから
環境変数違うなんて気がつかなかったな…笑
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント