0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜユーザーのcrontabファイルは「/var/spool/cron」にあるのか調べてみた

Last updated at Posted at 2025-11-16

はじめに

現在LPIC level1の資格取得を目指している、ピカピカのエンジニア1年生です
学習中に疑問に思ったことを備忘録として書き記してみました。

そのため、まだまだ知識不足な点も多く、記事内容に間違い修正点があるかもしれませんが、温かい目で見守る、もしくはご指摘いただけると幸いです。

この記事を書いたきっかけ

LPIC の勉強をしていると、書籍には

設定ファイルは /etc に置かれる

とよく書かれています。

しかし、ユーザーの crontab ファイルは /etc ではなく /var/spool/cron に置かれていることに違和感を感じました

  • crontab って「設定ファイル」じゃない?
  • 書籍には「設定は /etc に置かれる」と書いてあるのに?
  • /var は「ログ」や「可変データ」の場所じゃないの?

どうやら調べてみると、
FHS の厳密なルールに「/etc ではなく /var に置く理由」が隠されていることが分かりました。

同じ疑問を持つ方が多いと思い、記事としてまとめました。

それぞれのディレクトリの定義と役割(FHS に基づく)

まずはそれぞれのディレクトリの意味を整理してみます。

■ /etc

FHS 3.0 の /etcの定義 によると、

"Host-specific system configuration files.”(ホスト固有のシステム設定)

つまり、「システム設定ファイル」が配置されます

さらに

”it must be static and cannot be an executable binary.”

という記載があります。

これは、静的である必要があり、実行可能バイナリであってはならないということです。

Tips
実行バイナリとは、コンピュータが扱う「0」と「1」の2進数を基にしたデータ形式で、コンピュータが直接処理・実行できるデータのこと。

■ /var

FHS 3.0の/varの定義 によると、

"/var contains variable data files. ”

日本語に直すと、「/varには可変データファイルが含まれる。」という意味です。

要するに、
「/var」にはログファイルやspool(スプール)などの頻繁に書き換えられるファイルが配置される
ということになります。

■ /var/spool

FHS 3.0の /var/spool の定義 によると、

/var/spool contains data which is awaiting some kind of later processing.

翻訳すると、
/var/spool には、後続の処理を待機しているデータが含まれる。
という意味になります。

つまり、
将来、プログラム・ユーザー・管理者によって実行される予定のジョブデータ
が保存されます。

ユーザーの crontab が /var/spool/cron に置かれる3つの理由

ここからが本題です。

理由①:「/etc」は”静的な設定”の置き場だから

上記のFHSによると /etc の定義はこうです

静的なシステム設定ファイルを置く場所

ポイントは以下の通り

  • 管理者が編集する
  • システムの静的設定
  • 変更頻度が低い

更新頻度が高いようなファイルはどうやら配置されなそうです。

理由②:ユーザーの crontabファイルは「頻繁に変更される動的データ」だから

ユーザーは crontab -e で「crontabファイル」を自由に編集することができるため、内容は頻繁に変わります。

crontab -e
-eオプションをつけて実行することでエディタを使用してユーザーのcrontabファイルを編集することができる。

-e : 環境変数EDITORで指定されているエディタを起動する

そして、FHS では /var の定義が

可変データ(variable data)を置く場所

となります。

よって
ユーザーごとの頻繁に更新される crontab は /etc ではなく /varに置くのが適切
ということになります。

理由③:crontab は “ジョブの待ち行列(spool)” として扱われるから

spool は「待ち行列」「キュー」に相当します。

FHS では /var/spool はこう定義されています。

ジョブキュー(メール、印刷など)のための領域

この分類に従うと、
ユーザーのジョブ=待ち行列で管理されるべきデータ
/var/spool/cronに置かれるのが正しい。

まとめ

  • /etc は「静的なシステム設定」
  • /var は「変化するデータ」
  • /var/spool は「実行待ちジョブの待ち行列」

ユーザーの crontab は 頻繁に変更されるジョブ設定 であり“キュー(spool)” として扱われる可変データ のため /var/spool/cron に置かれる

つまり、

設定ファイルっぽく見えても「動的データ」であるなら /etc には置かない
/var に置くのが FHS 的に正しい

ということです。

場所 役割 該当する crontab
/etc/crontab 管理者が編集する静的な cron 設定 システム全体の cron 設定
/var/spool/cron/ユーザー 変更が頻繁で Queue(spool)として管理される動的データ ユーザーごとの cron ジョブ

参考文献

FHS 3.0( https://refspecs.linuxfoundation.org/FHS_3.0/ )に基づきます

■ FHS 3.0
Section 3.7 /etc
Section 3.11 /var
Section 3.11.2 /var/spool

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?