Twitterに投稿 はてなブックマークに追加 Google Bookmarksに追加

目次 >> cron

cronで自動実行

Linuxやcygwinなどで、定期的に何かコマンドやスクリプトを実行したい場合は、cronを使うのが便利である。Windowsにおけるタスクスケジューラである。
ここでは、cronの設定の仕方について解説する。

cronの設定

定期的に行うもの、たとえばバックアップや時計合わせなどはcronを利用して自動実行するようにする。

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

の各ディレクトリ内に毎日、毎時間、毎月、毎週行うスクリプトを入れておく。
それぞれ実行される時刻はFedoraやubuntuの場合、/etc/crontab内の

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

の各行に書かれている。

/etc/cron.d

には、crontabで指定するように細かく指定したものを入れておくことができる。
/etc/cron.d/内のファイルはパーミッションは原則644とする。
各スクリプトには、シェルとして/bin/shを指定する必要がある。/etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly内のファイルは、実行時間を指定せずに、

#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf

の様に、/etc/cron.d内のファイルは実行時間を指定して、

#!/bin/sh
*/3  *   * * *     root  /usr/local/sbin/temp.sh

の様に記述する。2番目に書いた時間を指定して実行するものに関しては/etc/crontabというファイル内に書いてもおなじことである。
実際の時間の指定方法であるが、

分 時 日 月 曜日

の5つのフィールドを記入する。例えば毎日1時という指定は、

0 1 * * *

となる。*はDOSなどでのワイルドカードと同様、最初から最後まですべてを意味する。よってこれを

* 1 * * *

とすると1時台の毎分実行されてしまうことになる。

ハイフン(-)を使うと、範囲を指定することができる。例えば、毎月5日から10日までの毎日1時0分という指定は

0 1 5-10 * *

となる。

曜日は0が日曜日、1が月曜日という風に対応している。なお7も日曜日として扱える。例えば、平日月曜日から金曜日までの毎日1時という指定は

0 1 * * 2-6

となる。

~毎という指定にはスラッシュ(/)を使う。

cronで実行される実行ファイルは、必ずフルパスで書く必要がある。

crondの実行状況を調べる

# /etc/init.d/crond status

と打ちます。

OpenSUSEの場合は

Checking for Cron: running
Checking for Cron: unused

のように、Fedoraの場合は、

crond (pid 1983) is running...
crond is stopped

の用に表示される。

ユーザーが自分用のcrontabを書き換える

/etc以下のファイルはroot以外は書き換えることができないが以下のようにしてユーザーは自分のcrontabを書き換えることができる。

$ crontab -e

実行結果を報告するメールをとめるには?

cronは実行されるとその結果をメールで送る機能がある。
これは、crontab内のMAILTOで指定する。

MAILTO="hoge@example.com"

とすると、hoge@example.comに実行結果が送られる。

MAILTO行自体がない場合は、crontabファイルの所有者にメールが送られる。

メールを送ること自体を停止したい場合は、

MAILTO=""

の様に、空欄を指定する。

cronのログファイル

cronの実行結果は、

/var/log/cron(Fedoraなど)
/var/log/syslog(Ubuntu)

あたりにある。

Cygwinでのcronの設定

インストール

まず、cygwinのセットアッププログラムであるsetup.exeを実行して、cronとcygrunsrvをインストールする。
次に、cygrunsrvでcronをWindowsのサービスとして登録する。

$ cygrunsrv --install cron --path /usr/sbin/cron --args -D

-Dオプションはcronをcygrunsrv下で動かすためのオプションである。

その後、

$ cygrunsrv --start cron

でサービスを起動します。これで、Windows起動時に自動的にcronがサービスとして起動する。

あとはLinuxなどと同様にcrontab -eでスケジュールを設定します。

Windowsプログラムの自動実行

Windowsの場合タスクスケジューラを使うのが簡単であるが、Windows用プログラムも、/cygdriveディレクトリからたどる形でCygwinのcronを使って起動することができる。例えば、

/cygdrive/c/Win32app/hoge/hoge.exe

とすると、Cドライブの\Win32app\hogeフォルダにある、hoge.exeが起動される。
起動するファイルにオプションなどをつけて起動したい場合は、そのようなバッチファイルを作成して、そのバッチファイルをcygwinから起動するようにするとよい。

cronが起動しているかどうかを確認するには

$ ps -ef | grep cron

とする。

なお、設定を書き換えた場合は、cronサービスの再起動をしないと有効にならないので注意。

最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて20.04、21.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2021 Chikuma Engineering Co., Ltd. All Rights Reserved.