Linuxのcron設定
Linuxでcronを設定する場合は、$ crontab -e [ minute hour day month day-of-week user command ] 形式 で編集するのが一般的だ。この場合、設定ファイルは /var/spool/cron/crontabs/ユーザー名(またはroot)/ に作られるが、設定ファイルはここ以外 /etc/cron.d あるいは /etc/crontab にも置くことができる。/etc/cron.d に置いた設定ファイルは、ファイルに拡張子を付加する(正確には[.]ピリオドをつける)ことで無効化できる。細かい動作については本記事では触れないが、興味のある方は こちら を参照するとよいだろう。実用上は「無効にするには拡張子をつける」と覚えておけばよいが、…それで、何が便利かというと、この機能を使うと複数のcron設定を一瞬にして有効にしたり、まとめて無効化できることだ。筆者は、Raspberry Pi のGPIOでコントロールする「赤外線ユニット」を自作して、スマートリモコン風に使っているが、リモコンが必要ない時に、まとめてOFFにする手段として重宝している。
※² rootで実行するcron
/etc/cron.d に設定ファイルを置く
/etc/cron.d に置いた拡張子なしの設定ファイルが cronで実行されるので、拡張子を取り去ったり(→有効化)、拡張子を付与したり(→無効化)することで、複数のcron設定(スマートリモコン風に言えば一連のON/OFF動作)をまとめて有効あるいは無効にすることが可能となる。手順は簡単で、以下のようになる。
⑴ /etc/cron.d に目的のcron設定を記述した設定ファイル(有効にする場合は拡張子なし)を置く。
⑵ このとき、設定ファイルのコマンドの前の「ユーザー名」が必須なので注意が必要だ。
[ minute hour day month day-of-week user command ] 形式 で書く。
⑶ 実際の運用はシェルスクリプトで行うのが便利だ。
シェルスクリプトの例
#! /bin/bash
echo "************************************"
echo "* ライト自動点灯消灯処理スクリプト "
echo "* ※エラー処理を省略しているので注意 "
echo "************************************"
echo
echo "現在の状態を表示"
ls /etc/cron.d/cron_TestCTRL*
echo
echo -n INPUT_STR:
read str
case "$str" in
[1]|[com1])
sudo mv /etc/cron.d/cron_TestCTRL_YES.disable /etc/cron.d/cron_TestCTRL_YES
sudo mv /etc/cron.d/cron_TestCTRL_NO /etc/cron.d/cron_TestCTRL_NO.disable
echo "現在の状態リスト"
ls /etc/cron.d/cron_TestCTRL*
echo "自動点消灯 に設定しました。"
echo "OK"
;;
[2]|[com2])
echo "未定義です"
;;
*)
sudo mv /etc/cron.d/cron_TestCTRL_YES /etc/cron.d/cron_TestCTRL_YES.disable
sudo mv /etc/cron.d/cron_TestCTRL_NO.disable /etc/cron.d/cron_TestCTRL_NO
echo "現在の状態リスト"
ls /etc/cron.d/cron_TestCTRL*
echo "自動点消灯 を OFF にしました。";;
esac