tag:crieit.net,2005:https://crieit.net/tags/logrotate/feed 「logrotate」の記事 - Crieit Crieitでタグ「logrotate」に投稿された最近の記事 2021-03-28T14:53:12+09:00 https://crieit.net/tags/logrotate/feed tag:crieit.net,2005:PublicArticle/16773 2021-03-26T21:32:33+09:00 2021-03-28T14:53:12+09:00 https://crieit.net/posts/RHEL-crontab-logrotate 【RHEL】crontabにlogrotateコマンドを登録したのに実行されなかった【解決】 <p>カスタムで作ったログローテ設定ファイルを読み込んで<br /> 任意の時間でログローテーションしたくて</p> <p>crontab -e(/var/spool/cron/root)に<br /> logrotateコマンドを登録したら実行されなかったのでメモ</p> <p>結果的には、logrotateコマンドをフルパスで指定することで解決しました。</p> <h1 id="動作環境"><a href="#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83">動作環境</a></h1> <p>Red Hat Enterprise Linux 8.3 (Ootpa)<br /> Kernel: 4.18.0-240.el8.x86_64<br /> logrotate 3.14.0</p> <h1 id="cron設定"><a href="#cron%E8%A8%AD%E5%AE%9A">cron設定</a></h1> <p>以下の設定でlogrotateコマンドをcrontabに登録</p> <pre><code># crontab -l 0 1 * * * logrotate -f /root/rsyslog_custom.conf </code></pre> <p>したけど、なんだか動作してないっぽい</p> <h1 id="ログ確認"><a href="#%E3%83%AD%E3%82%B0%E7%A2%BA%E8%AA%8D">ログ確認</a></h1> <p>とりあえずログを確認</p> <pre><code># 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: コマンドが見つかりません) </code></pre> <p>コマンドが見つからない?なんで??</p> <h1 id="原因"><a href="#%E5%8E%9F%E5%9B%A0">原因</a></h1> <p>調べてみたら、ログイン時に読み込まれる環境変数と<br /> cron実行時に読み込まれている環境変数が異なるから、とのこと。</p> <p>なるほど、PATHの変数の内容が違うのかな?</p> <h1 id="検証"><a href="#%E6%A4%9C%E8%A8%BC">検証</a></h1> <p>試しにcron実行されるときのPATHを確認</p> <pre><code># crontab -e 0 1 * * * logrotate -f /root/rsyslog_custom.conf ## PATH変数を出力するコマンドを登録 0 11 * * * echo $PATH > /tmp/path.txt </code></pre> <p>cron実行される時のPATH</p> <pre><code># cat /tmp/path.txt /usr/bin:/bin </code></pre> <p>rootログイン時のPATH</p> <pre><code># echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin </code></pre> <p>logrotateコマンドのフルパス</p> <pre><code># which logrotate /usr/sbin/logrotate </code></pre> <p>なるほど、cron実行時のPATHに/usr/sbinがないから<br /> そりゃ実行できないよね…</p> <h1 id="対応"><a href="#%E5%AF%BE%E5%BF%9C">対応</a></h1> <p>フルパス指定でcron登録を修正</p> <pre><code># crontab -l 0 1 * * * /usr/sbin/logrotate -f /root/rsyslog_custom.conf </code></pre> <p>実行されているか確認</p> <pre><code># tail /var/log/cron Mar 26 11:06:01 servername CROND[86677]: (root) CMD (/usr/sbin/logrotate -f /root/rsyslog_custom.conf) </code></pre> <p>動いた!</p> <p>cronって今までシェルスクリプトの登録くらいしかしてなかったから<br /> 環境変数違うなんて気がつかなかったな…笑</p> ゆみお