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 | オプション | 説明 | 
|---|---|
| -d | atrmのエイリアス | 
| -r | atrmのエイリアス | 
| -l | atqのエイリアス | 
| -f ファイルパス | STDINではなくファイルからジョブ指定 | 
atrmコマンドは予約中のジョブをジョブ番号で指定して削除できるコマンド。
atqコマンドは予約中のジョブを表示するコマンド
crontabコマンド
cronを設定するコマンド。
crontab <オプション>| オプション | 説明 | 
|---|---|
| -e | viエディタなどを使用して、crontabファイルを編集 | 
| -l | crontabファイルの内容を表示 | 
| -r | crontabファイルの削除 | 
| -i | crontabファイル削除時の確認 | 
| -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