Linuxの複数のcron設定を一括で『有効⇔無効』に変える方法(/etc/cron.d に設定ファイル)

Linuxのcron設定

Linuxでcronを設定する場合は、$ crontab -e [※¹] あるいは $ sudo 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にする手段として重宝している。

※¹ ログインしているユーザーで実行するcron
※² 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