はじめに
cronで実行したコマンド(つまり、crontab -eで設定したコマンド)を、rsyslogサービスを使って、/var/log/cron.logに定期的に書き込む設定をした後、このログファイルは永遠に書き込まれて行き、容量が肥大化しないだろうかと思い、定期的に、/var/log/cron.logのファイルをクリアする処理も、cronで設定する事にした。
環境
Ubuntu 16.04.5 LTS
試した事1
単純に、ログファイルを削除しようと思い、cronに下記のコマンドをスケジュールさせる。確かに、ログファイルは削除してくれたが、rsyslogサービスを再起動しないと、ログファイルは二度と作成されない事が判明する。しかも、root権限がないと削除できない。よって、この方法は没となる。
rm /var/log/cron.log
試した事2
/var/log/cron.logファイルを残したままで、中身をクリアして、0KBの空ファイルにするも、やはり、root権限がないと書込みができない事が判明。
cp /dev/null /var/log/cron.log
cronでsudoを指定したコマンドを実行するには(vimで躓く編)
visudoを編集する事で、cronでsudoを指定したコマンドが実行できるようになる事が判明したため、やってみる。
sudo visudo
Ubuntuでは、visudoを表示すると、デフォルトで、nanoが起動するようになっているため、vimに変更します。
sudo update-alternatives --config editor
参考記事
https://qiita.com/koara-local/items/35b999631b6ab41fdc9f
自分の環境では、vim.noxと、vim.tinyの2つのvimが入っているが、下記コマンドで、vim.noxが表示されたため、vim.noxの方を選ぶ事にする。(画面では3を選択)
ls -l /etc/alternatives/vi
/etc/alternatives/vi -> /usr/bin/vim.nox
vim.noxに変更した後、再度、確かに変更された事を確認する。
sudo update-alternatives --config editor
nanoではなく、vimで表示されるようになりました。
sudo visudo
cronでsudoを指定したコマンドを実行するには(やり方を考察編)
visudoを編集するには、visudoを直接編集する方法と、visudoは触らずに、ドロップインを作成する方法と2つの方法がある。下記のコマンドで、1つのファイルと、1つのディレクトリが検索されます。visudoを編集すると、/etc/sudoersファイルが編集されるが、/etc/sudoers.dというディレクトリの配下に、編集したい行だけ追加したファイルをセットすると、sudoersファイルを触る事なく、カスタマイズが行えるというのがドロップインの仕組みらしい。ドロップインを推奨する人もいるようだが、自分は、visudoを直接編集する事にした。
ls /etc | grep sudo
参考記事
https://www.teradas.net/archives/13222/
cronでsudoを指定したコマンドを実行するには(visudoを編集する編)
参考記事
https://www.bloguchi.info/1846
https://www.crossl.net/blog/crontab/
ググると、デフォルトで、Defaults:user requirettyが記載されているので、Defaults:user !requirettyを記述して、Defaults:user requirettyを無効にして下さいとあるが、RedHat系のディストリビューションでは、Defaults:user requirettyがデフォルトで記述されているのだが、Debian系のディストリビューションでは、デフォルトで、この記載はないとある。確かに、自分の環境にはなかった。
sudo visudo
なので、この1行のみ追加する。cpコマンドのパスは、which cpで探します。
user ALL=(root) NOPASSWD: /bin/cp
crontab -eで、テスト的に、sudo 付きのこの1行を追加する。
*/1 * * * * sudo cp /dev/null /var/log/cron.log
確かに、ファイル容量が小さくなっている事が確認できました。(sudo付のコマンドが実行された事が確認できた)
ls -l /var/log/cron.log
C'est fini