はじめに
man 5 crontab を読んでいてたまたま見つけたので紹介。
crontab の実装の違いにより使える、使えないがあるが、システム起動時に 1 度だけコマンドが実行されるような設定をかんたんに追加できます。
検証環境
| |
man ページに書かれている
man 5 crontab をしたところ以下のように記述されています。
| |
crontab の各行の左 5 列は時間指定のために使われますが( ex: 0 12 * * * echo hoge で「毎日 12:00 に echo hoge を実行」 )、この部分に @reboot と記述することでサーバ再起動時に 1 回だけ実行されるような設定ができます。
@hourly / @daily / @weekly などがよく利用されるため、 @ の記述になれている方も多いでしょう。
試してみる
早速試してみます。
対象サーバにログインし、 crontab -e を実行後以下のような設定を記述します。
| |
設定ができたら、再起動してます。
| |
再起動後、ログインしホームディレクトリ直下に date.log ができているか確認します。
| |
注意点
起動タイミングに他のデーモンプロセスが立ち上がっていない場合もある
man ページにも記載がありますが、利用の際には注意が必要です。
@reboot 利用時の「起動」とは cron(8)デーモンが起動するときであることに注意してください。 crond が立ち上がる前に他のデーモンプロセスが立ち上がっていることは保証されないため、 「DB に接続し何かを行う」 ( mysqld の起動が前提となる )などの処理がうまく行かないことがありえます。
他のデーモンプロセスに依存する場合は、プロセスチェックなどが必要になりそうですね。
OS の起動だけではなく、 crond サービスの再起動で実行されてしまう環境もある
以下のページを参考にさせていただきました。
OS 環境によっては、 crond サービスの再起動にて @reboot を使って記述している cron ジョブが実行されることもあるようです。
| OS | cron の再起動時の@reboot 実行有無 | cron の実装 |
|---|---|---|
| FreeBSD 9.1 | 実行される | Vixie Cron |
| Debian 7.0 | 実行されない(OS 起動時のみ) | Vixie Cron + パッチ |
| CentOS 6.4 | 実行されない(OS 起動時のみ) | Cronie |
上記のページでの調査では、 CentOS / Debian とよく使われる Linux OS はいずれも cron サービス再起動時には実行されないということです。
Ubuntu や Fedora 、 Redhat あたりも同様の挙動であれば @reboot は 多くの環境で OS 起動時のみ実行される と解釈してよさそうですが、実際に調査していません。
もしご存じの方がいらっしゃればコメントください。