2021-03-28に更新

【RHEL】crontabにlogrotateコマンドを登録したのに実行されなかった【解決】

カスタムで作ったログローテ設定ファイルを読み込んで
任意の時間でログローテーションしたくて

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

cron設定

以下の設定で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は誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント