0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux ジョブスケジューリング

Last updated at Posted at 2025-06-09

cron

デーモンcrond として稼働しているジョブスケジューラ。

crond は毎分ごとに、crontab ファイルの設定に従って実行すべきジョブがあるかを判定、実行する(crontab で設定できる最小単位は 1 分)。

cron を利用することで、指定した時間や間隔でコマンドやスクリプトの実行されるようスケジューリングすることができる。

crontab ファイル

cron table

crontab ファイルには、cron ジョブが記載される。

  • ユーザごと
    • /var/spool/cron/ユーザ名
    • /var/spool/cron/crontabs/ユーザ名
    • エディタで 直接編集しない$ crontab -e を使用する)
  • システム全体
    • /etc/crontab
    • /etc/cron.d/(ディレクトリ)
    • エディタで 直接編集する

crontab ファイルの書式は以下のように 小さい単位から大きい単位 の順に記述する。

ユーザごとの crontab
分 時 日 月 曜日 コマンド
システム全体の crontab
分 時 日 月 曜日 ユーザ名 コマンド
設定項目 指定可能な範囲
0 ~ 59
0 ~ 23
1 ~ 31
1 ~ 12
曜日 0 ~ 70 または 7:日曜日)
特殊文字 意味
* 全ての値
* * * * *:毎分実行
, 複数指定
0,30 * * * *:毎時 0 分と 30 分
- 範囲指定
10-15 * * * *:毎時 10 分 ~ 15 分の間(10, 11, 12, 13, 14, 15分)
0 12 1-5 * *:毎月 1 日 ~ 5 日
/ 間隔指定
*/5 * * * *:5 分ごと
例(毎日午前3時にスクリプトを実行)
0 3 * * * myscript.sh
例(毎分スクリプトを実行)
* * * * * myscript.sh

/etc/cron.allow / /etc/cron.deny

ユーザが cron ジョブを実行できるかどうかを制御する設定ファイル。

  • /etc/cron.allow
    • cron ジョブを実行できるユーザを指定する
  • /etc/cron.deny
    • /etc/cron.allow がない場合にのみ使用される
    • cron ジョブの実行を禁止するユーザを指定する

$ crontab

cron ジョブ(スケジュールされたタスク)を管理するためのコマンド。

特にユーザごとの crontab/var/spool/cron/)を編集するために利用される。

$ crontab -e コマンド実行すると、crontab ファイルが規定のエディタによって開かれるため、内容を編集することでジョブを設定することができる。

エディタは 環境変数 $VISUAL または $EDITOR に設定されたものが起動される(nanovim など)。

エディタを利用して crontab ファイルを編集する(edit)
$ crontab -e

各ユーザが $ crontab -e で編集する内容は、内部的には /var/spool/cron/crontabs/ユーザ名 に保存される(システムによっては /var/spool/cron/ユーザ名 になることもある)。

ファイルの名前にユーザ名が使用されることからもわかるように、crontab ファイルへの編集は各ユーザごとに独立しており、他のユーザのジョブには影響することがない。

現在の crontab を表示する(list)
$ crontab -l
crontab ファイルを削除する
$ crontb -r

anacron

cron 同様に設定ファイルでスケジュールされたタスクを実行するジョブスケジューラ。

anacroncrond デーモンによって起動される。

cron は予定された時刻にシステムが起動していない場合、ジョブの実行をスキップするのに対して、anacron は実行できなかったジョブをスキップせず、次回起動時にまとめて実行する。

/etc/anacrontab で設定を行う。

設定ファイル

anacronetc/anacrontab の設定に従い、以下のディレクトリに配置されたコマンドを実行する。

ディレクトリ 説明
/etc/cron.hourly/ 1 時間ごとに実行するスクリプトを配置
/etc/cron.daily/ 1 日ごとに実行するスクリプトを配置
/etc/cron.weekly/ 1 週間ごとに実行するスクリプトを配置
/etc/cron.monthly/ 1 ヶ月ごとに実行するスクリプトを配置

atd

指定したコマンドを指定した時刻に 1 回限りで実行するデーモン。

/etc/at.allow / /etc/at.deny

ユーザが at ジョブを実行できるかどうかを制御する設定ファイル。

  • /etc/at.allow
    • at ジョブを実行できるユーザを指定する
  • /etc/at.deny
    • /etc/at.allow がない場合にのみ、利用される
    • at ジョブの実行を 禁止するユーザを指定する
  • どちらもない場合には root ユーザのみが実行できる

$ at

指定したコマンドを 1 回限りで実行する。

$ crontab が定期的なジョブ実行を行うの対して、$ at は 1 回だけ指定した時間で実行したい場合に利用される。

$ at コマンドで追加されたジョブは atd (/usr/sbin/atd) デーモンによって実行される。

$ at コマンドを実行すると、標準入力 からジョブ(実行コマンド)を受け付けるモードに入る。

指定した日時にコマンドを実行する
$ at 時間 日付

対話モードになったら、実行させたいコマンドを入力する。Ctrl + D キーで入力を終了する。

スケジュールされたジョブを確認する
$ at -l
ジョブの中身(スクリプト)を確認する
$ at -c ジョブID
スケジュールされたジョブを削除する(delete / remove)
$ at -d ジョブID
$ at -r ジョブID

$ atq

スケジュールされたジョブを確認する
$ atq

$ atrm

スケジュールされたジョブを削除する
$ atrm ジョブID

$ batch

システムがアイドル状態(負荷が少ない状態)の時にジョブを実行させる。

時刻を指定することはできない

ジョブを登録する
$ batch 

$ batch コマンドを実行すると、登録するジョブを入力するための対話が開始される。実行したいコマンドが入力し終えたら、Ctrl + D を同時押しで対話を終了することができる。

$ batch標準入力 からジョブを受け取るため、以下のようにすることでスクリプト実行をジョブとして登録することができる。

スクリプト実行をジョブとして登録する
$ echo "bash ./myscript.sh" | batch

また $ batch$ at と同様に atd デーモンによって管理され、以下のような $ at と共通の機能を持つ。

  • $ atq で登録済みジョブを確認できる
  • $ atrm で登録済みジョブを削除できる
  • /etc/at.deny で実行を禁止するユーザを登録することができる

タイマーユニット

systemd のタイマーユニット(*.timer)は、cron と同様に定期的なタスクを実行するための機能。

cron よりも柔軟で管理しやすいメリットがあるが、使い方が難しい。

ジョブを実行する cron とは異なり、ターマーユニットは systemd のサービス (*.service) をスケジュール実行する。

通常の systemd タイマー(/etc/systemd/system/)は root 権限で設定するが、一般ユーザでも ~/.config/systemd/user/ を使えばユーザ単位での systemd タイマーを設定できる。

.timer ユニットと .service ユニット から構成される。

  • .timer ユニット
    • タイマーの設定
    • いつ、どのように実行するかを定義する
  • .service ユニット
    • 実行する処理
    • 実際に実行するコマンドやスクリプトを定義する

cron では 1 つのファイル(crontab)でスケジュールとコマンドを設定するが、systemd では スケジュール(.timer)とコマンド(.service)を分けることで管理しやすくなっている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?