0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GUIで理解するcron入門:crontab-uiでの可視化から実務のハマりどころまで

0
Last updated at Posted at 2026-04-25

用語

cronとは

Unix系のオペレーティングシステムで使用されるタスクスケジューラーのことです。特定の日時や間隔で自動的にコマンドやスクリプトを実行するための仕組みです。例えば、毎日決まった時間にバックアップを取ったり、毎週特定の曜日にデータを更新したりすることができます。設定は「crontab」というファイルで行い、そこに実行したいコマンドやスケジュールを記述します。

Windowsで言うとタスクスケジューラがそれに該当します。
image.png

AWSで言うとEventBridge(Scheduler)

AzureでいうとAzure Functionsのスケジュール機能が近そう。

crontabとは

cronで実行するタスクのスケジュールを設定するためのファイルやコマンドのことです。このファイルには、どのコマンド・スクリプトをいつ実行するかを指定するルールが書かれています。
このファイルはcrontab -eというコマンドで編集することが出来ます。また、現在の設定はcrontab -lで確認することが出来ます。

atとは

cronとは異なり、一度限りのタスクを指定した時間に実行するためのコマンドです。
(個人的に、ではありますが案件で使ったことないですね・・・)

タスク管理/スケジュール管理ツール

JP1やHinemos等のツールがあります。
これらのツールを使う事で各サーバ個別でcrontab -eでジョブをスケジューリング・管理して。。。という事を無くし、JP1サーバ・Hinemosサーバ上で一元管理することが可能になります。使っている案件はちょこちょこ見るので覚えておくと良いと思います。触ってみたいようであればHinemosは無料で作ることも可能なので、こちらがおすすめです。

cronを触ってみる

まずはGUI(crontab-ui)

crontab-uiというツールを導入します。
これはNode.jsをインストールする必要があります。

root@test-Standard-PC-i440FX-PIIX-1996:~# apt update && apt upgrade -y
root@test-Standard-PC-i440FX-PIIX-1996:~# apt install nodejs npm -y
root@test-Standard-PC-i440FX-PIIX-1996:~# npm install -g crontab-ui

crontab-uiコマンドで起動することが出来ます。
URIが発行されるのでWebブラウザを開いて、これにアクセスします。

root@test-Standard-PC-i440FX-PIIX-1996:~# crontab-ui
Cron db path: /usr/local/lib/node_modules/crontab-ui/crontabs
Node version: 18.19.1
Crontab UI (0.4.2) is running at http://127.0.0.1:8000

Firefoxでアクセスしてみました。
image.png

ジョブスケジュールを新規作成してみます。
Newボタンを押下します。
その後以下の設定を入力してみます。
Name:Check-Alive
Command:date >> /home/test/Check-Alive-crontab-ui.log
Schedule:MinuteからWeekまですべて*
この状態でSaveを押下します。

Minute Hour Day Month Weekはそれぞれ分、時、日、月、曜日を示します。
image.png

1行追加されました。
この状態でSave to crontabを押下します。
image.png

OKを押下します。
image.png

Save出来ました。
Nameの右側に緑色のチェックマークがついていることを確認します。
image.png

5分ほど待ってみます。
homeディレクトリ配下にCheck-Alive-crontab-ui.logが作成されていることがわかると思います。
image.png

中身を見てみると毎分dateコマンドが実行され、それがログに記載されていることがわかると思います。
image.png

terminalでcrontab -lコマンドを実行するとWebUIで作成したジョブが表示されていることが見れると思います。
image.png

例えばこれを2分に1回としてみたいと思います。
*/2として、Setボタンを押下。Saveを押します。
image.png

Save to crontabを押下します。
image.png

数分待った後、Check-Alive-crontab-ui.logを見てみます。
毎分ログに記録されていたと思いますが、これが2分に1回のペースで記載されるようになりました。
image.png

Disableを押下してジョブを止めます。
image.png

CUIで操作してみる

terminalを開いてcrontab -eコマンドを実行します。
image.png

crontabをどのエディターで編集するかを選べるようです。
1(nanoコマンド)で編集していきたいと思います。
これはDebian系のOSで初めて実行するタイミングで聞かれるようです。
image.png

1行目に先ほどGUIで設定したジョブが記載されているので、2行目に以下のジョブを設定します。
10,20,30日の午前8時ちょうどに上記のcronテストで作成したlogを削除するという内容です。

0 8 10,20,30 * * rm -f /home/test/Check-Alive-crontab-ui.log

この状態で保存します。
image.png

crontab -lで確認してみます。
登録されていることがわかります。
image.png

crontabで気を付けること

Day(日)とWeek(曜日)の両方の設定を入れると、そこだけはor条件(どちらかが満たされるときに実行される)になります。
例えば先ほどcrontab -eで入力したスケジュールが以下だったとします。

0 8 10,20,30 * mon,fri rm -f /home/test/Check-Alive-crontab-ui.log

この場合、「10日・20日・30日」のいずれか、または「月曜日・金曜日」のいずれかに該当する日の、午前8時00分にコマンドが実行されます。
【例】

  • 10日(火曜日)→ 実行される(「日」の条件に一致)
  • 13日(金曜日)→ 実行される(「曜日」の条件に一致)
  • 20日(金曜日)→ 実行される(両方の条件に一致)

もし「10, 20, 30日のうち、月曜か金曜の時だけ」に限定したい場合は、コマンド側で判定を行う必要があります。コマンドを使って無理やり設定する感じになります。

0 8 10,20,30 * * [ "$(date +\%w)" -eq 1 ] || [ "$(date +\%w)" -eq 5 ] && rm -f /home/test/Check-Alive-crontab-ui.log

AWSのEventBridgeも似たような制限があります。
具体的にはDayかWeekだけ設定できて、例えばDayを設定した場合はWeekの方は"?"にしないといけません。逆も同様でWeekの設定をしているのであれば、Dayの設定は"?"としなければエラーとなり設定できません。

Hinemos等のJob管理ツールを使うとこの辺りも柔軟に対応することが出来ます。
例えば第4金曜日とか。ですね。

0
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?