「Cron」の版間の差分
(同期) |
|||
5行目: | 5行目: | ||
[[fr:Cron]] |
[[fr:Cron]] |
||
[[ko:Cron]] |
[[ko:Cron]] |
||
+ | [[ru:Cron]] |
||
[[sk:Cron]] |
[[sk:Cron]] |
||
[[zh-CN:Cron]] |
[[zh-CN:Cron]] |
||
64行目: | 65行目: | ||
ExecStart= |
ExecStart= |
||
ExecStart=/usr/bin/crond -n -m '/usr/bin/msmtp -t'</nowiki>}} |
ExecStart=/usr/bin/crond -n -m '/usr/bin/msmtp -t'</nowiki>}} |
||
− | {{Note| |
+ | {{Note|{{ic|<nowiki>ExecStart=</nowiki>}} を空にすると前に指定された {{ic|ExecStart}} コマンドが全てキャンセルされます。}} |
==== esmtp の例 ==== |
==== esmtp の例 ==== |
||
145行目: | 146行目: | ||
# 出力があったらすぐに、cron は MTA を実行し、MTA にヘッダーをわたす。ジョブは完了しておらず、出力がまだあるかもしれないので、パイプは開きっぱなしになる。 |
# 出力があったらすぐに、cron は MTA を実行し、MTA にヘッダーをわたす。ジョブは完了しておらず、出力がまだあるかもしれないので、パイプは開きっぱなしになる。 |
||
# MTA は postfix との接続を開いて、残りのボディが来るまで待っている間、接続を開き続ける。 |
# MTA は postfix との接続を開いて、残りのボディが来るまで待っている間、接続を開き続ける。 |
||
− | # 一時間 |
+ | # 一時間以内に postfix はアイドル状態の接続を閉じて、以下のようなエラーを表示する: |
smtpmsg='421 … Error: timeout exceeded' errormsg='the server did not accept the mail' |
smtpmsg='421 … Error: timeout exceeded' errormsg='the server did not accept the mail' |
||
{{Pkg|moreutils}} の chronic または sponge コマンドを使うことでこの問題は解決できます。それぞれの man ページより: |
{{Pkg|moreutils}} の chronic または sponge コマンドを使うことでこの問題は解決できます。それぞれの man ページより: |
||
+ | ; chronic: chronic はコマンドを実行して、コマンドが失敗した場合にのみ (0以外の終了コードが吐かれたりクラッシュしたとき)、標準出力や標準エラーが表示されるようにします。コマンドが問題なく実行されたときは、何も出力されません。 |
||
− | ; chronic: chronic runs a command, and arranges for its standard out and standard error to only be displayed if the command fails (exits nonzero or crashes). If the command succeeds, any extraneous output will be hidden. |
||
+ | ; sponge: sponge は標準入力を読み込んで指定されたファイルに書き出します。シェルのリダイレクトと違って、sponge は出力ファイルを開く前のあらゆる入力を吸い上げてしまいます。出力ファイルが指定されなかったときは、sponge は標準出力に出力します。 |
||
− | ; sponge: sponge reads standard input and writes it out to the specified file. Unlike a shell redirect, sponge soaks up all its input before opening the output file… If no output file is specified, sponge outputs to stdout. |
||
+ | マニュアルには載っていませんが、chronic は標準出力を開く前のコマンド出力をバッファします (sponge も同じようにバッファを使います)。 |
||
− | Even if it's not said chronic buffer the command output before opening its standard output (like sponge does). |
||
== Crontab のフォーマット == |
== Crontab のフォーマット == |
||
170行目: | 171行目: | ||
*/5 9-16 * 1-5,9-12 1-5 ~/bin/i_love_cron.sh |
*/5 9-16 * 1-5,9-12 1-5 ~/bin/i_love_cron.sh |
||
+ | さらに、crontab には特殊なキーワードもいくつか存在します: |
||
− | 他の例や高度な設定テクニックは下を見て下さい。 |
||
+ | |||
+ | @reboot : 起動時 |
||
+ | @yearly : 一年毎 |
||
+ | @annually ( == @yearly) |
||
+ | @monthly : 一月毎 |
||
+ | @weekly : 一周毎 |
||
+ | @daily : 一日毎 |
||
+ | @midnight ( == @daily) |
||
+ | @hourly : 一時間毎 |
||
+ | |||
+ | 例えば、起動時に {{ic|i_love_cron.sh}} を実行する場合: |
||
+ | |||
+ | @reboot ~/bin/i_love_cron.sh |
||
+ | |||
+ | 参照: http://www.linuxandlife.com/2013/01/how-to-use-crontab-to-schedule-tasks.html#sthash.AXvOdsAz.dpuf |
||
== 基本的なコマンド == |
== 基本的なコマンド == |
||
253行目: | 269行目: | ||
== X.org サーバーを使用するアプリケーションを実行 == |
== X.org サーバーを使用するアプリケーションを実行 == |
||
+ | Cron は X.org サーバー下では実行されないため、X.org サーバーアプリケーションを実行するために必要な環境変数を知りません。そのため、環境変数を定義する必要があります。{{AUR|xuserrun}} などのプログラムを使うことで X.org アプリケーションを実行できます: |
||
− | Cron does not run under the X.org server therefore it cannot know the environmental variable necessary to be able to start an X.org server application so they will have to be defined. One can use a program like {{AUR|xuserrun}} to do it: |
||
17 02 * ... /usr/bin/xuserrun /usr/bin/xclock |
17 02 * ... /usr/bin/xuserrun /usr/bin/xclock |
||
− | + | もしくは環境変数を手動で定義する方法もあります ({{ic|echo $DISPLAY}} で現在の DISPLAY の値がわかります): |
|
17 02 * ... env DISPLAY=:0 /usr/bin/xclock |
17 02 * ... env DISPLAY=:0 /usr/bin/xclock |
||
+ | SSH などを通す場合は、権限を与えてください: |
||
− | If done through say SSH, permission will need be given: |
||
# xhost +si:localuser:$(whoami) |
# xhost +si:localuser:$(whoami) |
||
267行目: | 283行目: | ||
== 非同期のジョブ処理 == |
== 非同期のジョブ処理 == |
||
+ | コンピュータをオフにしてもジョブがちゃんと実行されるようにしたい場合、複数の解決方法が存在します (簡単な順番で並んでいます): |
||
− | If you regularly turn off your computer but do not want to miss jobs, there are some solutions available (easiest to hardest): |
||
=== Cronie === |
=== Cronie === |
||
274行目: | 290行目: | ||
Cronie には特定時刻に指定したプログラムを起動するための標準 UNIX デーモンである crond と関連ツールが含まれています。Cronie はオリジナルの cron をベースとしており、pam や SELinux を利用できるようにするなどの改善がされています。 |
Cronie には特定時刻に指定したプログラムを起動するための標準 UNIX デーモンである crond と関連ツールが含まれています。Cronie はオリジナルの cron をベースとしており、pam や SELinux を利用できるようにするなどの改善がされています。 |
||
+ | |||
+ | {{Note|{{ic|systemctl status cronie}} の出力に {{ic|crond[<PID>]: (root) CAN'T OPEN (/etc/crontab): No such file or directory}} のようなメッセージが表示される場合がありますが、cronie 1.4.8 現在、これはエラーではありません。[https://lists.archlinux.org/pipermail/arch-general/2012-February/025178.html こちら] を参照。}} |
||
=== Dcron === |
=== Dcron === |
||
283行目: | 301行目: | ||
=== Cronwhip === |
=== Cronwhip === |
||
+ | {{AUR|cronwhip}} は見過ごされた cron ジョブを自動的に実行するスクリプトです。昔 Arch でデフォルトの cron 実装だった ''dcron'' で動作します。[https://bbs.archlinux.org/viewtopic.php?id=57973 フォーラムスレッド] も参照。 |
||
− | {{AUR|cronwhip}} is a script to automatically run missed cron jobs; it works with the former default cron implementation, ''dcron''. |
||
− | See also the [https://bbs.archlinux.org/viewtopic.php?id=57973 forum thread]. |
||
=== Anacron === |
=== Anacron === |
||
294行目: | 311行目: | ||
=== Fcron === |
=== Fcron === |
||
+ | ''anacron'' と同じように、{{Pkg|fcron}} はコンピュータの電源が落ちている場合を想定しますが、''anacron'' とは違って、一日よりも短いインターバルでイベントを組むことができます。定期的にサスペンド・ハイバネートを行うような環境 (ノートパソコンなど) で有用です。cronwhip と同様に、fcron はコンピュータが落ちている間に実行すべきだったジョブを実行します。 |
||
− | Like ''anacron'', {{Pkg|fcron}} assumes the computer is not always running and, unlike ''anacron'', it can schedule events at intervals shorter than a single day which may be useful for systems which suspend/hibernate regularly (such as a laptop). Like cronwhip, fcron can run jobs that should have been run during the computer's downtime. |
||
+ | {{Pkg|cronie}} を fcron で置き換える場合、spool ディレクトリが {{ic|/var/spool/fcron}} になり、ユーザーの crontab を編集するときに ''crontab'' の代わりに {{ic|fcrontab}} コマンドを使うことになるので注意してください。crontab はバイナリ形式で保存され、spool ディレクトリに ''foo''.orig という名前のテキストファイルが出来ます。手動でユーザーの crontab を編集するスクリプトを使っているのであれば、修正が必要です。 |
||
− | When replacing {{Pkg|cronie}} with fcron be aware the spool directory is {{ic|/var/spool/fcron}} and the {{ic|fcrontab}} command is used instead of ''crontab'' to edit the user crontabs. These crontabs are stored in a binary format with the text version next to them as ''foo''.orig in the spool directory. Any scripts which manually edit user crontabs may need to be adjusted due to this difference in behavior. |
||
+ | 伝統的なユーザーの crontab を fcron 方式に変換するクイックスクリプトレット: |
||
− | A quick scriptlet which may aide in converting traditional user crontabs to fcron format: |
||
{{bc| |
{{bc| |
||
308行目: | 325行目: | ||
}} |
}} |
||
− | + | [https://bbs.archlinux.org/viewtopic.php?id=140497 フォーラムスレッド] も参照。 |
|
== 排他性の確保 == |
== 排他性の確保 == |
||
+ | ジョブの実行時間が長くなる可能性がある場合 (例えばシステムのバックアップは変更箇所が多かったりネットワーク接続が遅かったりして長くなることがあります)、{{ic|flock}} ({{Pkg|util-linux}}) を使うことで cron ジョブが二重に実行されないようにすることができます。 |
||
− | If you run potentially long-running jobs (e.g., a backup might all of a sudden run for a long time, because of many changes or a particular slow network connection), then {{AUR|lockrun}} can ensure that the cron job won't start a second time. |
||
− | + | 5,35 * * * * /usr/bin/flock -n /tmp/lock.backup /root/make-backup.sh |
|
== cronie == |
== cronie == |
2016年2月27日 (土) 22:35時点における版
Wikipedia より:
cron は Unix ライクなコンピュータオペレーティングシステムにおける時間基準のジョブスケジューラです。cron を使うことでジョブ (コマンドやシェルスクリプト) をスケジュールして定期的に特定の時刻・時間に実行することが可能になります。システムのメンテナンスや管理を自動化するためによく使われます。
目次
インストール
cron の実装はたくさん存在しますが、デフォルトではそのいずれもインストールされません。代わりにベースシステムは systemd/タイマー を使用しています。実装の比較については Gentoo の cron ガイド を見て下さい。
公式リポジトリにあるパッケージ:
AUR にあるパッケージ:
- bcronAUR
- dcronAUR
- vixie-cronAUR
- scron-gitAUR
設定
有効化と自動起動
デーモンをインストールしても、デフォルトでは有効になっていません。インストールしたパッケージにはサービスが入っているので、systemctl を使用してコントロールすることができます。例えば、cronie を起動して有効化するには:
# systemctl start cronie # systemctl enable cronie
これらのコマンドはあなたが選んだ実装に合わせて変更してください、例えば:
# systemctl start dcron # systemctl enable dcron
/etc/cron.daily/
や同じようなディレクトリを見てジョブが存在するか確認してください。cron サービスを有効にすることで、それらのジョブが作動します。
ジョブのエラーの対処
cron は stdout や stderr からの出力を記録して sendmail
コマンドを使ってユーザーのスプールにメールで送信しようと試みます。/usr/bin/sendmail
が存在しない場合 Cronie はメール出力を無効化します。これらのメッセージをログとして記録するには -m
オプションを使ってスクリプトを書くか基本的な SMTP サブシステムをインストールしてください。
msmtp の例
msmtp を使って cronie からメールを取得する方法は2つあります:
- msmtp-mta パッケージをインストールします。
/usr/bin/sendmail
から/usr/bin/msmtp
にシンボリックリンクが作成されます。cronie
を再起動して新しいsendmail
コマンドが検出されていることを確認してください。msmtp にユーザー名をメールアドレスに変換する手段を用意する必要があります。- 次のように crontab に
MAILTO
行を追加する:MAILTO=your@email.com
または: /etc/msmtprc
に次の行を加えて:aliases /etc/aliases
/etc/aliases
を作成してください:your_username: your@email.com
# Optional:
default: your@email.com
- 次のように crontab に
cronie.service
ユニットを編集します。例えば、/etc/systemd/system/cronie.service.d/msmtp.conf
を作成してください:[Service] ExecStart= ExecStart=/usr/bin/crond -n -m '/usr/bin/msmtp -t'
esmtp の例
esmtp と procmail をインストールしてください。
インストールした後、ルーティングを設定してください:
/etc/esmtprc
identity myself@myisp.com hostname mail.myisp.com:25 username "myself" password "secret" starttls enabled default mda "/usr/bin/procmail -d%T"
Procmail は配送モードで動作するのに root 権限を必要としますが cronjob を root で実行している場合は問題になりません。
正しく動作しているかテストするには、ファイル message.txt
を作成して中に "test message"
を記述してください。
同じディレクトリから次を実行してください:
$ sendmail user_name < message.txt
そして:
$ cat /var/spool/mail/user_name
テストメッセージと送信された日時が表示されるはずです。
全てのジョブのエラー出力は /var/spool/mail/user_name
にリダイレクトされます。
権限の問題で、root にメールを作成・送信するのは困難です (例: su -c ""
)。esmtp
の設定で root のメールを全て通常のユーザーに転送させることができます:
/etc/esmtprc
force_mda="user-name"
opensmtpd の例
opensmtpd をインストールしてください。
/etc/smtpd/smtpd.conf
を編集します。以下の設定でローカル配信が可能になります:
listen on localhost accept for local deliver to mbox
次のコマンドでテストが行えます:
# systemctl start smtpd $ echo test | sendmail user
user は mbox フォーマットを扱えるメールクライアントを使うか、/var/spool/mail/user
ファイルを見ることでメールを確認できます。全てが問題なく動作するようでしたら、opensmtpd を有効にします:
# systemctl enable smtpd
この方法には、リモートサーバーに cron のローカルな通知が送信しないという利点があります。ネットワーク接続も必要ありません。欠点としては、新しいデーモンを実行する必要があります。
長い cron ジョブ
仮に cron によって以下のプログラムが実行されると:
#!/bin/sh echo "I had a recoverable error!" sleep 1h
以下のことが起こります:
- cron がスクリプトを実行
- 出力があったらすぐに、cron は MTA を実行し、MTA にヘッダーをわたす。ジョブは完了しておらず、出力がまだあるかもしれないので、パイプは開きっぱなしになる。
- MTA は postfix との接続を開いて、残りのボディが来るまで待っている間、接続を開き続ける。
- 一時間以内に postfix はアイドル状態の接続を閉じて、以下のようなエラーを表示する:
smtpmsg='421 … Error: timeout exceeded' errormsg='the server did not accept the mail'
moreutils の chronic または sponge コマンドを使うことでこの問題は解決できます。それぞれの man ページより:
- chronic
- chronic はコマンドを実行して、コマンドが失敗した場合にのみ (0以外の終了コードが吐かれたりクラッシュしたとき)、標準出力や標準エラーが表示されるようにします。コマンドが問題なく実行されたときは、何も出力されません。
- sponge
- sponge は標準入力を読み込んで指定されたファイルに書き出します。シェルのリダイレクトと違って、sponge は出力ファイルを開く前のあらゆる入力を吸い上げてしまいます。出力ファイルが指定されなかったときは、sponge は標準出力に出力します。
マニュアルには載っていませんが、chronic は標準出力を開く前のコマンド出力をバッファします (sponge も同じようにバッファを使います)。
Crontab のフォーマット
crontab の基本的なフォーマットは:
minute hour day_of_month month day_of_week command
- minute は 0 から 59 までの値。
- hour は 0 から 23 までの値。
- day_of_month は 1 から 31 までの値。
- month は 1 から 12 までの値。
- day_of_week は 0 から 6 までの値、0 が日曜日。
カンマを使うことで複数の時間を指定することが出来ます。時間の範囲はハイフンで決めることができ、アスタリスクはワイルドカード文字になります。スペースはフィールドを分けるのに使います。例えば、次の行はスクリプト i_love_cron.sh
を夏の期間 (6月, 7月, 8月) を除く平日の午前9時から午後4:55まで5分間隔で実行します:
*/5 9-16 * 1-5,9-12 1-5 ~/bin/i_love_cron.sh
さらに、crontab には特殊なキーワードもいくつか存在します:
@reboot : 起動時 @yearly : 一年毎 @annually ( == @yearly) @monthly : 一月毎 @weekly : 一周毎 @daily : 一日毎 @midnight ( == @daily) @hourly : 一時間毎
例えば、起動時に i_love_cron.sh
を実行する場合:
@reboot ~/bin/i_love_cron.sh
参照: http://www.linuxandlife.com/2013/01/how-to-use-crontab-to-schedule-tasks.html#sthash.AXvOdsAz.dpuf
基本的なコマンド
Crontab を直接編集してはいけません。代わりに、ユーザーは crontab
プログラムを使って crontab を編集してください。このコマンドを実行するには、ユーザーは users グループのメンバーである必要があります (gpasswd
コマンドを見て下さい)。
crontab を一覧するには、次のコマンドを実行してください:
$ crontab -l
crontab を編集するには、次のコマンドを使って下さい:
$ crontab -e
crontab を削除するには、次のコマンドを使って下さい:
$ crontab -r
既に crontab が存在していて、古い crontab を完全に上書きするには次を使って下さい:
$ crontab saved_crontab_filename
コマンドライン (Wikipedia:ja:標準ストリーム) から crontab を上書きするには:
$ crontab -
他の誰かの crontab を編集するには、次のコマンドを root で実行してください:
# crontab -u username -e
同じフォーマット (コマンドに -u username
を追加すること) は crontab の表示・削除にも使えます。
サンプル
コマンド /bin/echo Hello, world!
を毎月の毎日の毎時間の1分目 (つまり 12:01, 1:01, 2:01 ...) に実行するエントリ:
01 * * * * /bin/echo Hello, world!
1月の平日に5分ごと (つまり 12:00, 12:05, 12:10 ...) に同じジョブを実行するエントリ:
*/5 * * jan mon-fri /bin/echo Hello, world!
次の行は夏 (6月, 7月, 8月) 以外の毎月の平日 (月-金) の午前9時から午後5時まで5分間隔で (午後5時0分は除く) スクリプト i_love_cron.sh
を実行します ("man 5 crontab" より):
*0,*5 9-16 * 1-5,9-12 1-5 /home/user/bin/i_love_cron.sh
定期的な設定は次の crontab テンプレートのように入力することも可能です:
# Chronological table of program loadings # Edit with "crontab" for proper functionality, "man 5 crontab" for formatting # User: johndoe # mm hh DD MM W /path/progam [--option]... ( W = weekday: 0-6 [Sun=0] ) 21 01 * * * /usr/bin/systemctl hibernate @weekly $HOME/.local/bin/trash-empty
デフォルトエディタ
デフォルトエディタを変更するには、シェルの初期化スクリプトで EDITOR
環境変数を定義してください (vim ユーザーは vim-default-editorAUR が使えます)。例:
/etc/profile.d/nano-default-editor.sh
#!/bin/sh export EDITOR=/usr/bin/nano
環境変数が正しく使われるようにするために、通常ユーザーでは、sudo
の代わりに su
を使う必要があります:
$ su -c "crontab -e"
上記のコマンドをエイリアスにするときは printf
が必要です。su
を使うと新しいシェルが起動するためです:
alias scron="su -c $(printf "%q " "crontab -e")"
run-parts 問題
cronie は run-parts
を使用して cron.daily
/cron.weekly
/cron.monthly
のスクリプトを実行します。それらのスクリプトの名前にはドット (.) を含められないので注意してください (例: backup.sh
)。オプションを付けないと run-parts
がスクリプトを無視してしまうためです (参照: man run-parts
)。
X.org サーバーを使用するアプリケーションを実行
Cron は X.org サーバー下では実行されないため、X.org サーバーアプリケーションを実行するために必要な環境変数を知りません。そのため、環境変数を定義する必要があります。xuserrunAUR などのプログラムを使うことで X.org アプリケーションを実行できます:
17 02 * ... /usr/bin/xuserrun /usr/bin/xclock
もしくは環境変数を手動で定義する方法もあります (echo $DISPLAY
で現在の DISPLAY の値がわかります):
17 02 * ... env DISPLAY=:0 /usr/bin/xclock
SSH などを通す場合は、権限を与えてください:
# xhost +si:localuser:$(whoami)
非同期のジョブ処理
コンピュータをオフにしてもジョブがちゃんと実行されるようにしたい場合、複数の解決方法が存在します (簡単な順番で並んでいます):
Cronie
Cronie には anacron が含まれています。プロジェクトのホームページより:
Cronie には特定時刻に指定したプログラムを起動するための標準 UNIX デーモンである crond と関連ツールが含まれています。Cronie はオリジナルの cron をベースとしており、pam や SELinux を利用できるようにするなどの改善がされています。
Dcron
dcronAUR は標準で非同期のジョブ処理をサポートしています。以下のようにジョブの名前に @hourly, @daily, @weekly, @monthly を付けて下さい:
@hourly ID=greatest_ever_job echo This job is very useful.
Cronwhip
cronwhipAUR は見過ごされた cron ジョブを自動的に実行するスクリプトです。昔 Arch でデフォルトの cron 実装だった dcron で動作します。フォーラムスレッド も参照。
Anacron
Anacron はジョブを非同期に処理する dcron を完全に置き換えます。
Anacron は cronie に含まれており、設定ファイルは /etc/anacrontab
です。フォーマットの情報は anacrontab(5)
man ページにあります。anacron -T
を実行することで /etc/anacrontab
に問題がないかテストすることができます。
Fcron
anacron と同じように、fcron はコンピュータの電源が落ちている場合を想定しますが、anacron とは違って、一日よりも短いインターバルでイベントを組むことができます。定期的にサスペンド・ハイバネートを行うような環境 (ノートパソコンなど) で有用です。cronwhip と同様に、fcron はコンピュータが落ちている間に実行すべきだったジョブを実行します。
cronie を fcron で置き換える場合、spool ディレクトリが /var/spool/fcron
になり、ユーザーの crontab を編集するときに crontab の代わりに fcrontab
コマンドを使うことになるので注意してください。crontab はバイナリ形式で保存され、spool ディレクトリに foo.orig という名前のテキストファイルが出来ます。手動でユーザーの crontab を編集するスクリプトを使っているのであれば、修正が必要です。
伝統的なユーザーの crontab を fcron 方式に変換するクイックスクリプトレット:
cd /var/spool/cron && ( for ctab in *; do fcrontab ${ctab} -u ${ctab} done )
フォーラムスレッド も参照。
排他性の確保
ジョブの実行時間が長くなる可能性がある場合 (例えばシステムのバックアップは変更箇所が多かったりネットワーク接続が遅かったりして長くなることがあります)、flock
(util-linux) を使うことで cron ジョブが二重に実行されないようにすることができます。
5,35 * * * * /usr/bin/flock -n /tmp/lock.backup /root/make-backup.sh
cronie
vixie-cron (伝統的な cron) をずっと使っていた場合 cronie の設定方法に困惑させられるかもしれません。ファイル階層は以下のとおりになっています:
/etc |----- anacrontab |----- cron.d | ----- 0hourly |----- cron.daily |----- cron.deny |----- cron.hourly |----- cron.monthly |----- cron.weekly |----- crontab
Note that the crontab file is not created by default, but jobs added here will be run if you wish to use this file. Cronie provides both cron and anacron functionality. The difference is that cron will run jobs at particular time intervals (down to a granularity of one minute) if the machine is on at the particular time specified, while anacron runs jobs (with a minimum daily granularity) without assuming that the machine is turned on all the time. When the machine is on, anacron will check to see if there are any jobs that should have been run and will run them accordingly. The /etc/cron.d
and /etc/cron.hourly
directories are associated with cron functionality, while the /etc/anacrontab
file and /etc/cron.daily
, /etc/cron.weekly
, and /etc/cron.monthly
directories are associated with anacron functionality. The /etc/cron.deny
file is there so that any user who is not specifically prohibited can create their own cron jobs.
To implement a system-wide cron job, create a crontab-like file for it and place it in the /etc/cron.d
directory or add the job to /etc/crontab. Any executable (these are almost always shell scripts) in
/etc/cron.hourly
will be run every hour.
Anacron functionality is implemented similarly, however using the /etc/cron.daily
, /etc/cron.weekly
, or /etc/cron.monthly
directories, depending on how frequently you want the job to be run. The anacron job files are also executables; i.e. not in crontab-format. Anacron is triggered at the beginning of every hour by the crontab file /etc/cron.d/0hourly
which runs the executables in /etc/cron.hourly
including the file /etc/cron.hourly/0anacron
- deleting these will prevent anacron running any daily, weekly or monthly tasks.
Dcron
The cron daemon parses a configuration file known as crontab
. Each user on the system can maintain a separate crontab file to schedule commands individually. The root user's crontab is used to schedule system-wide tasks (though users may opt to use /etc/crontab
or the /etc/cron.d
directory, depending on which cron implementation they choose).
/var/spool/cron/root
# Run command at a scheduled time # Edit this 'crontab -e' for error checking, man 1 crontab for acceptable format # <@freq> <tags and command> @hourly ID=sys-hourly /usr/sbin/run-cron /etc/cron.hourly @daily ID=sys-daily /usr/sbin/run-cron /etc/cron.daily @weekly ID=sys-weekly /usr/sbin/run-cron /etc/cron.weekly @monthly ID=sys-monthly /usr/sbin/run-cron /etc/cron.monthly # mm hh DD MM W /path/command (or tags) # W = week: 0-6, Sun=0 21 01 * * * /usr/bin/systemctl suspend
These lines exemplify one of the formats that crontab entries can have, namely whitespace-separated fields specifying:
- @period
- ID=jobname (this tag is specific to dcron)
- command
The other standard format for crontab entries is:
- minute
- hour
- day
- month
- day of week
- command
The crontab files themselves are usually stored as /var/spool/cron/username
. For example, root's crontab is found at /var/spool/cron/root
詳しい情報や設定例は crontab の man ページを見てください。