cron メモ

Posted on 2018-11-05 in zakki

前エントリで

cron 設定することを書いたんだけど、何せ久しぶりなもんだから色々忘れていたので調べたメモ。

cron が見る場所

  • /var/spool/cron/crontabs
  • /etc/crontab
    • /etc/cron.hourly
    • /etc/cron.daily
    • /etc/cron.weekly
    • /etc/cron.monthly
  • /etc/cron.d

所有権

  • root:root

パーミッション

  • 644

使い分け

  • /var/spool/cron/crontabs:ユーザ毎(/etc/passwd)
  • /etc/crontab:システム管理者
  • /etc/cron.d:それ以外

フォーマット

3通りある。ユーザフィールドがあるかないか、スクリプトファイルか。

  • crontab -u user -e (/var/spool/cron/crontabs)(多分)

    • min hour dayofmouth month dayofweek command
  • /etc/crontab の編集 or /etc/cron.d 配下のファイル

    • min hour dayofmouth month dayofweek user command
  • /etc/hourly など

    • 普通のスクリプトファイル

反映

crond の再起動は必要ない。だってmanくんがそう言ってるし。。ちなみにこれは Linux(Vixie Cron) だけど、AIX は違うらしいね。

cron  then  wakes  up every minute, examining all stored crontabs, checking each command to see if it should be run in the
current minute.  When executing commands, any output is mailed to the owner of the crontab (or to the user  named  in  the
MAILTO  environment  variable  in  the crontab, if such exists).  The children copies of cron running these processes have
their name coerced to uppercase, as will be seen in the syslog and ps output.

Additionally, cron checks each minute to see if its spool directory's modtime (or the modtime on  the  /etc/crontab  file)
has  changed, and if it has, cron will then examine the modtime on all crontabs files and reload those which have changed.
Thus cron need not be restarted whenever a crontab file is modified.  Note that the crontab(1) command updates the modtime
of the spool directory whenever it changes a crontab.

その他

  • crontab -> /var/spool/cron/crontabs/etc/crontab じゃない。
  • 変数設定できる。
  • MAILTOでメールを飛ばそう。
  • ログも残しておこう。

下2つやれてないっていう。





(参考) お世話になりました。

http://blog.livedoor.jp/u_26/archives/1819139.html
http://vividcode.hatenablog.com/entry/man-cron-and-crontab

おまけ

適当極まりない何か。違ってても許してね。

debianでは~、ってあるけど、どうなんだろ。fedora にだって/etc/cron.dはあるし。確かに、/etc/crontabには hourly だかが無かったけど。

cron(8)
cron  searches  its  spool  area (/var/spool/cron/crontabs) for crontab
files (which are named after accounts in /etc/passwd);  crontabs  found
are  loaded  into  memory.  Note that crontabs in this directory should
not be accessed directly - the crontab command should be used to access
and update them.

cron also reads /etc/crontab, which is in a slightly different format (see crontab(5)). In Debian, the content of /etc/crontab is predefined to run programs under /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly and /etc/cron.monthly. This configuration is specific to Debian, see the note under DEBIAN SPECIFIC below.

Additionally, in Debian, cron reads the files in the /etc/cron.d direc‐ tory. cron treats the files in /etc/cron.d as in the same way as the /etc/crontab file (they follow the special format of that file, i.e. they include the user field). However, they are independent of /etc/crontab: they do not, for example, inherit environment variable settings from it. This change is specific to Debian see the note under DEBIAN SPECIFIC below.

Like /etc/crontab, the files in the /etc/cron.d directory are monitored for changes. In general, the system administrator should not use /etc/cron.d/, but use the standard system crontab /etc/crontab.

  • crontabs はメモリにロードされるよ。
  • cronは /var/spool/cron/crontabs を見に行くよ。
  • このcrontabは直接さわんな。アクセスや更新するときはcrontabを使ってね。
  • cron は/etc/crontab もみるよ。
  • ちょっとフォーマットが違うよ。
  • Debian はhourlyだとかがプリセットされてるよ。
  • 加えてDebianでは/etc/cron.dも観るよ。
  • crontabと同じ方法で扱うよ。(もちろんフォーマットも少し違うって言ってたものだよ)
  • crontab とは互いに独立するよ(環境変数とかね)。
  • crontabのように、cron.dの変更はモニターされてるよ
  • 一般的には、管理者はcron.dを使わないよ。crontab を使うんだよ。
/etc/crontab  and the files in /etc/cron.d must be owned by root, and must not be group- or other-writable. In contrast to
the spool area, the files under /etc/cron.d or the files under  /etc/cron.hourly,  /etc/cron.daily,  /etc/cron.weekly  and
/etc/cron.monthly  may  also be symlinks, provided that both the symlink and the file it points to are owned by root.  The
files under /etc/cron.d  do  not  need  to  be  executable,  while  the  files  under  /etc/cron.hourly,  /etc/cron.daily,
/etc/cron.weekly and /etc/cron.monthly do, as they are run by run-parts (see run-parts(8) for more information).

cron  then  wakes  up every minute, examining all stored crontabs, checking each command to see if it should be run in the
current minute.  When executing commands, any output is mailed to the owner of the crontab (or to the user  named  in  the
MAILTO  environment  variable  in  the crontab, if such exists).  The children copies of cron running these processes have
their name coerced to uppercase, as will be seen in the syslog and ps output.

Additionally, cron checks each minute to see if its spool directory's modtime (or the modtime on  the  /etc/crontab  file)
has  changed, and if it has, cron will then examine the modtime on all crontabs files and reload those which have changed.
Thus cron need not be restarted whenever a crontab file is modified.  Note that the crontab(1) command updates the modtime
of the spool directory whenever it changes a crontab.
  • crontab と cron.d は root によって所有されなければならないよ。
  • それと、group/other に 書き込み権限はいらないよ。
  • spool area(/var/spool/cron/crontab)と対照で、cron.d の下にあるファイルとhourlyだかの下にあるファイルは、シンボリックリックになる場合* もあって、どちらもrootが所有している必要があるよ。
  • cron.d の下のファイルは実行権限はいらないよ
  • cron は毎分起動するよ。すべてのcrontabを試すよ。
  • コマンドが実行されるとき、(MAILTOの変数があるならそれも加えて)、crontab の所有者に何らかのアウトプットをメールするよ。
  • syslogとpsの出力ログは大文字にされるよ。