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>
ゆみお