にほんブログ村
こんなことしたいと思ったりしませんか?
- 毎日、ある時間にプログラムを実行したい。
- 一時間に一回、コマンドを実行したい。
- 毎月一度、バックアップを取りたい。
Linuxには、定期的にコマンドを実行するために cron と呼ばれるデーモンプロセスがあります。これを使うと、決まった時間にコマンドを実行させたりすることができて便利です。
今回は、Cron(クーロン)の基本的な使い方をまとめてみます。
cron は、「crond(デーモン)」と「crontab」 で構成されます。1分ごとに crond が起動され、crontab ファイルに定義されたスケジュールを調べて、そこに実行すべきジョブがあれば実行します。
スケジューリングの編集は、以下の2つの方法で行えます。
- crontabコマンド を利用する
- /etc/crontab に書き込む
今回は、Crontab に定義を書き込む形で設定していきます。
Crond が動いているか確認
まず、使用しているシステムで、Cronデーモンが動作している必要があります。
「systemctl status <デーモンの名前>」コマンドを使って確認します。
kkint@ubuntu:/etc$ systemctl status cron.service
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-10-06 12:01:47 JST; 3 days ago
Docs: man:cron(8)
Main PID: 985 (cron)
Tasks: 1 (limit: 4555)
Memory: 1.3M
CPU: 841ms
CGroup: /system.slice/cron.service
└─985 /usr/sbin/cron -f -P
Crond が動いていれば、上記のように「active(running)」の表示が出ます。
もし動いていない場合は、以下のコマンドで起動できます。
systemctl start cron.service
Crontab で設定
「/etc/crontab」ファイルに書き込む方法での設定手順です。まずは、Crontab ファイルを開いて見て見ましょう。
cat /etc/crontab
「cat」コマンドで、Crontab ファイルを指定して開いてみます。
kkint@ubuntu:/etc$ cat /etc/crontab
/etc/crontab: system-wide crontab
Unlike any other crontab you don't have to run the `crontab'
command to install the new version when you edit this file
and files in /etc/cron.d. These files also have username fields,
that none of the other crontabs do.
SHELL=/bin/sh
You can also override PATH, but by default, newer versions inherit it from the environment
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Example of job definition:
.---------------- minute (0 - 59)
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr …
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
kkint@ubuntu:/etc$
下の方に、「*」が 5つ並んでいる行が見えますね。ここに定義を記入していきます。
この「*」印ですが、左から順に「分、時、日、月、曜日、実行ユーザー、 実行するコマンド」となっています。
時間は24時間で表記をします。
指定できる値は、下記のようになります。
指定対象 | 指定範囲 |
分 | 0〜59 |
時 | 0〜23 |
日 | 1〜31 |
月 | 1〜12 または jan〜dec |
曜日 | 0〜7 または sun〜sat |
「分 時 日 月 曜日 ユーザー コマンド」の順に記入していきます。
< 記述例 >
1時に実行
- * 1 * * * [ユーザー] [コマンド]
13時に実行
- * 13 * * * [ユーザー] [コマンド]
5分おきに実行
*/5 * * * * [ユーザー] [コマンド]
1時、2時、5時、6時、7時、8時に実行
- * 1,2,5-8 * * * [ユーザー] [コマンド]
もう少し例を見ていきましょう。
kkint というユーザー権限で実行し、kkint ユーザーのデスクトップに test.txt を作成する例です。
1分ごとに実行
* * * * * kkint touch /home/kkint/Desktop/test.txt
1:00 – 1:59 まで1分ごとに実行
* 1 * * * kkint touch /home/kkint/Desktop/test.txt
毎日14:00 に実行
0 14 * * * kkint touch /home/kkint/Desktop/test.txt
毎月10日から20日の 00:00 に実行
0 0 10-20 * * kkint touch /home/kkint/Desktop/test.txt
毎週月曜日から金曜日の 13:00 に実行
0 13 * * 1-5 kkint touch /home/kkint/Desktop/test.txt
Cron のログを出力する
デフォルトでは、Cron のログは出力されないようになっていますが、これを出力するようにすると、動作確認の際に便利です。
「/etc/rsyslog.d/50-default.conf」ファイルの設定を変更します。
kkint@ubuntu:/etc$ cat /etc/rsyslog.d/50-default.conf | grep cron
#cron.* /var/log/cron.log <<<<< この部分
cron,daemon.none;\
まず、vim などのエディターを使って、上記ファイルを開きます。
$ vim /etc/rsyslog.d/50-default.conf
次に、対象の部分のコメントを外します。
#cron.* /var/log/cron.log
|
*
cron.* /var/log/cron.log <<<<< コメントアウトする
最後に、rsyslogを再起動して、変更を適用します。
$ sudo service rsyslog restart
ログの確認例
2分おきに df コマンドを実行し、その結果をテキストファイルに書き込み、デスクトップに保存した時のログの出力は、以下の通りです。
Crontab ファイルには、以下のように記載しています。
*/2 * * * * kkint /usr/bin/df -h > /home/kkint/Desktop/df_results.txt
ログを見ると、指定したコマンドが実行されているのが分かりますね。
kkint@ubuntu:/etc$ cat /var/log/cron.log
Oct 9 13:45:01 ubuntu CRON[9087]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 9 13:55:01 ubuntu CRON[9164]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 9 14:01:01 ubuntu cron[985]: (system) RELOAD (/etc/crontab)
Oct 9 14:45:01 ubuntu CRON[10567]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Oct 9 14:46:01 ubuntu CRON[10575]: (kkint) CMD (/usr/bin/df -h >> /home/kkint/Desktop/df_results)
Oct 9 14:46:01 ubuntu CRON[10576]: (kkint) CMD (date >> /home/kkint/Desktop/df_results)
面白かったら、フォローしてください!
関連するブログ:
- Linux の基本コマンドが変更されて困った
- Raspberry Pi で SNMP エージェントを動かす
- モバイル PC で SaaS の快適アクセス
- LPIC を学ぶ(1) lsof コマンドについて
- Server Name Indication (SNI) とは
- Linux の Cron の基本的な使い方と設定方法
- UbuntuとQNAPのiSCSI統合方法
- Raspberry PiでのPi-Hole設定ガイド
- 複数の宛先に ping を打つことができる「fping」
最近の人気ブログ TOP 10:
- 夢の国で起きた悲劇 ~ディズニーリゾートで心中した一家~
- 新潟六日町のトンネル事件:恋愛に狂った暴力団員の極限の嫉妬
- 知られざる女子高生コンクリ詰め殺人発覚当時の報道(後編)
- 仙台アルバイト女性集団暴行殺人
- 犬鳴峠リンチ焼殺事件 ~超凶悪少年犯罪~
- 浜田省吾ファン必見の聖地巡礼訪問地リスト
- 広島の魅力: 浜田省吾ファン必見のスポット
- 未成年に踏みにじられた25歳の純情 ―実録・おやじ狩り被害―
- R40、テルの今:城東工業高校の伝説のその後
- 高崎山の王・ベンツ ~ミスターニホンザルの生涯~
最近の記事:
- 複数の宛先に ping を打つことができる「fping」
- ネイティブの英語 7 “A cup of joe”
- 死刑確定囚・野比のび太 – 第二十三話・昇華するのび太の鬱屈
- 死刑確定囚・野比のび太 – 第二十二話・静の怒りと武の苛立ち
- 死刑確定囚・野比のび太 – 第二十一話・夫婦間の亀裂とのび太の影響
- 死刑確定囚・野比のび太 – 第二十話・のび太の初出勤: 恐れと葛藤
- 死刑確定囚・野比のび太 – 第十九話・ジャイアンとのび太の絆
- 死刑確定囚・野比のび太 – 第十八話・引きこもりの息子と家族のジレンマ
- 死刑確定囚・野比のび太 – 第十七話・ドラえもんと30歳ののび太の葛藤
- 死刑確定囚・野比のび太 – 第十六話・剛田商店の成長と静香の貢献