10.2. ジョブスケジューリング

10.2.1. cron

cronは定期的なジョブを実行するために使用できる仕組みでスケジュールを定義したコマンドを定期的に実行することが可能。 デーモンとも呼ばれる。

cronの構成

cronの仕組みはcrondデーモンとcrontabコマンドで構成される。 内部的にはcrondが1分ごとにcrontabファイル内容を調べることで実現している。

crontab

ユーザのcrontabは/var/spool/cron/ディレクトリに配置されるが、そのファイルを直接エディタで編集してはならない。 編集にはcrontabコマンドを用いる。

システムのcrontabは/etc/crontabファイルに保存される。 システムのcronで定期的に実行するジョブを格納するディレクトリは以下の通り。

ディレクトリ名説明
/etc/cron.hourly毎時定期的に実行するジョブのスクリプトを格納
/etc/cron.daily毎日定期的に実行するジョブのスクリプトを格納
/etc/cron.monthly毎月定期的に実行するジョブのスクリプトを格納
/etc/cron.weekly毎週定期的に実行するジョブのスクリプトを格納
/etc/cron.d上記以外のジョブのスクリプトを格納

cron/atのアクセス制限

cron/atはユーザー単位で利用制限を実施できる。 制限は/etc/cron.allow,/etc/cron.denyファイルの設定で可能。

10.2.2. cronに関するコマンド

at/atrm/atqコマンド

atコマンドは1回限りのジョブ予約を行えるコマンド。

at 
オプション説明
-datrmのエイリアス
-ratrmのエイリアス
-latqのエイリアス
-f ファイルパスSTDINではなくファイルからジョブ指定

atrmコマンドは予約中のジョブをジョブ番号で指定して削除できるコマンド。 atqコマンドは予約中のジョブを表示するコマンド

crontabコマンド

cronを設定するコマンド。

crontab <オプション>
オプション説明
-eviエディタなどを使用して、crontabファイルを編集
-lcrontabファイルの内容を表示
-rcrontabファイルの削除
-icrontabファイル削除時の確認
-u ユーザーユーザーを指定しcrontabファイルの編集 ( rootユーザーのみ使用可能 )

記述例は以下のように行う。

30 22 * * * /usr/local/bin/backup.sh # 毎日22:30に実行
0 12 * * 1,2 /usr/local/bin/backup.sh # 毎週月曜日、火曜日の12:00に実行

10.2.3. systemdによるスケジューリング

systemdでスケジューリングを行う場合タイマーUnitを使用する。 タイマーUnitには以下のような種類がある。

種類使用例
モノトニックタイマシステム起動10分後に実行、以降1週間ごとに実施
リアルタイムタイマ毎日午前4時に実行

/etc/systemd/system/以下に拡張子.timerでファイルを作成することで設定を行う。 ファイルの記述書式はman 7 systemd.timeで確認可能。

スケジュールの確認

systemctl list-timers

スケジュールの削除

systemctl stop hogehoge.timer

サービスの実行ログの確認

journalctl -u apt-daily.service