cron.hourlyだけanacronで実行されない理由【crontab】

/etc/crontabcatすると、以下のように表示される。(Ubuntu:18.04.4 LTS)

$ 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
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
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 )
#

このファイルで色々気になった点があったので、Q&A形式で書いていく。

 

Q.test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )は、どういう意味か?

A.「anacronが存在しない場合のみcronに任せる」という意味。

  • testコマンドはファイルが存在するかどうか確認するという意味。
  • ||は「もし失敗したら右を実行する」という意味。
  • cd /は念のためカレントディレクトリをルートに設定してから実行するという意味。
  • &&は「もし成功したら右を実行する」という意味。
  • run-parts/etc/cron.daily以下にあるシェルスクリプトをすべて実行するという意味。

 

Q./etc/cron.hourlyだけanacronに処理を任せていないのは何故か?

A.anacronは最高でも「1日1回しか実行できない」仕様のため、anacronにcron.hourlyを任せても意味がないから。

例えば1/1に8回実行するはずのcronのタスクが実行できなかったとして、それをanacronに任せても翌日(1/2)に1回しか実行してくれない。

 

こういう仕様なので、「試しにanacronをインストールしてみよう」とインストールしちゃうと

  • /etc/cron.daily
  • /etc/cron.weekly
  • /etc/cron.monthly

の3つが動かなくなってしまうみたいすね・・・。

 

おわり

Linux
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました