- はじめに
— これは
— 環境 - cronで動かすとあるアプリケーション
— cron.txt - くろーん(苦労)の始まり
— tail -f /var/log/syslog (1)
— tail -f /var/log/syslog (2)
— tail -f /var/log/syslog (3)
— やっとこさ - man cron
— /etc/cron.d/ 以下に設置するファイルのオーナーと権限
— /etc/cron.d/ 以下に設置するファイルのフォーマット - ということで
— man 有難い
— cron って
— 出直 してきます
はじめに
これは
cron の設定で少しばかりくろーん(苦労)した話をざっくりと纏めたものです。
結局、man cron
して解決しました。
環境
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_CODENAME=xenial DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
cron で動かすとあるアプリケーション
cron.txt
crontab で定義せずに /etc/cron.d/ 以下に定義ファイルを置くのが個人的なトレンド。
$ echo "* * * * * echo 'test' >> /tmp/test.txt" > cron.txt $ sudo ln -s cron.txt /etc/cron.d/test_cron
シンボリックリンクで /etc/cron.d/
以下に設定。
完璧…(だと思った。
くろーん(苦労)の始まり
tail -f /var/log/syslog (1)
May 19 10:51:01 ubuntu-xenial cron[1077]: (*system*test_cron) WRONG FILE OWNER (/etc/cron.d/test_cron)
おや、なんかエラーが出て cron.txt で指定した処理が動いていないぞ。
エラーメッセージにも出ているように /etc/cron.d/test_cron
の元ファイルである cron.txt のオーナーを変更しよう。
$ sudo chown root:root cron.txt
よし、これで安心。
tail -f /var/log/syslog (2)
May 19 10:52:01 ubuntu-xenial cron[1077]: (*system*test_cron) INSECURE MODE (group/other writable) (/etc/cron.d/test_cron)
なぬ、パーミッション問題… Group と Other には書き込み権限を付けていたらダメなんか。
改めて、cron.txt の権限を644
に変更。
$ sudo chown 644 cron.txt
きっと大丈夫でしょう。
tail -f /var/log/syslog (3)
May 19 12:09:01 ubuntu-xenial cron[1077]: Error: bad username; while reading /etc/cron.d/test_cron May 19 12:09:01 ubuntu-xenial cron[1077]: (*system*test_cron) ERROR (Syntax error, this crontab file will be ignored)
えー、そうなのか…。/etc/cron.d/
以下に設置する cron の定義にはユーザー名を明記する必要があるようです。
$ sudo sh -c "echo \"* * * * * ubuntu echo 'test' >> /tmp/test.txt\" > cron.txt"
やっとこさ
動いた。
$ cat /tmp/test.txt test ... test
man cron
/etc/cron.d/ 以下に設置するファイルのオーナーと権限
該当していそうなところを抜粋。
/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).
ざっくり要約すると…
/etc/crontab
と/etc/cron.d
以下に置くファイルのオーナーはroot
であること- Group と Other に書き込み権限が無いこと(
644
ってことかな) - シンボリックな場合でも、シンボリックリンク及びリンク元のファイルもオーナーは
root
であること /etc/cron.d
以下のファイルには実行権限は要らないよ
/etc/cron.d/ 以下に設置するファイルのフォーマット
同じく、該当していそうなところを抜粋。
Support for /etc/cron.d is included in the cron daemon itself, which handles this location as the system-wide crontab spool. This directory can contain any file defining tasks following the format used in /etc/crontab, i.e. unlike the user cron spool, these files must provide the username to run the task as in the task definition.
こちらもざっくり意訳。/etc/cron.d
以下はシステムワイドな crontab スプールとして cron デーモンから利用されるので、個々のタスク定義には実行するユーザー名を明記する必要がある。
ということで
man 有難い
ググるより前に man が必要マン。
cron って
奥深い。
出直してきます
cron で少しばかりくろーん(苦労)した話でした。
お疲れさまでした。