※当サイトの記事には、広告・プロモーションが含まれます。

Linuxのcronの設定ファイルの配置場所の全量を知りたかったんだが...

nazology.net

⇧ 脳の処理的な話になるんかね?

Linuxのcronとは

Wikipediaさんによりますと、

The cron command-line utility is a job scheduler on Unix-like operating systems. Users who set up and maintain software environments use cron to schedule jobs (commands or shell scripts), also known as cron jobs, to run periodically at fixed times, dates, or intervals. It typically automates system maintenance or administration—though its general-purpose nature makes it useful for things like downloading files from the Internet and downloading email at regular intervals.

https://en.wikipedia.org/wiki/Cron

Cron is most suitable for scheduling repetitive tasks. Scheduling one-time tasks can be accomplished using the associated at utility.

https://en.wikipedia.org/wiki/Cron

Cron's name originates from Chronos, the Greek word for time.

https://en.wikipedia.org/wiki/Cron

⇧ とのこと。

Overviews

The actions of cron are driven by a crontab (cron table) file, a configuration file that specifies shell commands to run periodically on a given schedule. The crontab files are stored where the lists of jobs and other instructions to the cron daemon are kept. Users can have their own individual crontab files and often there is a system-wide crontab file (usually in /etc or a subdirectory of /etc e.g. /etc/cron.d) that only system administrators can edit.

https://en.wikipedia.org/wiki/Cron

Each line of a crontab file represents a job, and looks like this:

# ┌───────────── minute (0–59)
# │ ┌───────────── hour (0–23)
# │ │ ┌───────────── day of the month (1–31)
# │ │ │ ┌───────────── month (1–12)
# │ │ │ │ ┌───────────── day of the week (0–6) (Sunday to Saturday;
# │ │ │ │ │                                   7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>

https://en.wikipedia.org/wiki/Cron

⇧ cronにおけるジョブのスケジュールとかは、上記のような定義が標準的ということなんですかね?

Linuxのcronの設定ファイルの配置場所の全量を知りたかったんだが...

で、肝心のcronの設定ファイルは、Wikipediaさんによると「crontab (cron table) file」のことらしいのだけど、このcrontabファイル(cronの設定ファイル)は、どこに配置されてるん?

vividcode.hatenablog.com

ということで、cron 設定を書く場所 (crontab ファイルの置き場所) としては次の 3 つがある。

  • 各ユーザーの crontab ファイルの置き場所
    • /var/spool/cron/crontabs ディレクトリ内 (crontab コマンドで読み書きする)
  • root 権限が必要 (?) な crontab ファイルの置き場所

cron 設定ファイル (crontab ファイル) の置き場所と書式について - ひだまりソケットは壊れない

⇧ 上記サイト様によりますと、3カ所が全量ということみたい。

このうち、各ユーザーのcrontabファイル(cronの設定ファイル)は、

qiita.com

 /var/spool/cron配下にユーザごとにcrontabファイルが用意されている。
そのcrontabファイルにユーザがスケジューリングしておけばcrondデーモンが1分おきにスケジュールをチェックしてくれるので、記述した時間にジョブが実行される。

【図解】cronの仕組み #Linux - Qiita

⇧ 上図のようなディレクトリで管理されてますと。

基本的には、ログインしているユーザーで、crontabファイル(cronの設定ファイル)を編集すると思うのだけど、

crontab -e

⇧ 上記のコマンドで、crontabファイル(cronの設定ファイル)を編集することになるので、どのユーザーで上記のコマンドを実行するのかは、気を付けねばならないということですね。

とりあえずは、rootユーザー、ないしは、root権限のユーザーを利用できる環境であれば、/var/spool/cron配下のファイルのバックアップを取っておくのが良いということなんですかね。

crontabファイル(cronの設定ファイル)の配置場所は3カ所が全量なのかと思ったら、

tech.quickguard.jp

ご存知のとおり、Debian系の cron は以下の 2か所に置かれた crontabファイルを認識します。

  • /etc/crontab
  • /etc/cron.d/*

また、/etc/cron.hourly//etc/cron.daily/ などの事前定義済みのディレクトリ (以降、総称して「/etc/cron.<PERIOD>/」と呼びます。) 配下に実行ファイルを置いておけば、配置したディレクトリに応じて毎時〜毎月の頻度で定期実行してくれます。

 

Debian系の cron で気をつけること - QG Tech Blog

Linuxディストリビューションによっては、3カ所以外にも配置されるってことなんですかね?

そして、

ozuma.hatenablog.jp

crontabコマンドは、オプションを付けずに引数を与えると、その指定されたファイルを読み込んで設定される。

$ crontab cron.txt

これで、cron.txtに書かれた内容が設定される。だから、crontab -eで設定することは禁止して、常にこの形式で行うことにすれば、-eオプションを付けることが無いわけだから-r事故も起こらない。この場合、~/etc/crontab とか作っておいて、それを読み込ませる、とすると良いだろう。(ヘタに-lオプションを使うと事故る危険があるから、-lで吐いてそれを加工、はしないようにする)。

crontab -e は「絶対に」使ってはいけない - ろば電子が詰まつてゐる

⇧ 何やら、独自にcrontabファイル(cronの設定ファイル)の配置場所とか作れちゃうような情報があり、カオスな予感が...

案の定というか、

www.yuulinux.tokyo

# crontab -l

*/1 * * * * touch crontest.txt

*/1 * * * * touch crontest_r2.txt

crontabで外部設定ファイルを読み込むと上書きされる。

FreeBSD9.3 Crontab 外部ファイル読み込み検証 | 優技録

⇧ 独自に作成したcrontabファイル(cronの設定ファイル)がどこに配置されているのか探す手間が発生しそう...

そして、

oswald.hatenablog.com

crontab により実行されたコマンドから出力が行われると、cron デーモンは通常その出力結果を登録されたメールアドレス宛に配送します。そのため、cronスクリプトがバックグラウンドで行われていても、そのプロセスがopenしているファイルディスクリプタがcloseされない限り、cronは次の処理に移行しないのです。

cronスクリプトをバックグラウンドで実行するときの注意点 - ソフトウェアエンジニア現役続行

⇧ というハマりどころもあるようです。

う~む、設定まわりは、関連している全量が管理し辛いから難しいですな...

ネットのニュースとかで、設定まわりのミスによる障害がよく取り上げられるのも宜(むべ)なるかな...

毎度モヤモヤ感が半端ない...

今回はこのへんで。