こんにちは。
LinuxのcronでNHKの語学ストリーミングを録音して勉強しています。gogakuondemand.rbとかです。作者の人には大変感謝しております。
自宅においてあるraspbianのやつと、ほかで動かしているDebianのやつで同時に動かしてリダンダンシーを確保している(録音忘れを回避している)のですが、どっちも忘れたころにcronの設定を変更する必要があり、混乱が生じたので整理してみました。
- ユーザレベルでのcronの設定
- rootでの設定
1.ユーザレベルでのcronの設定
これは $ crontab -e を編集することになります。設定ファイルの保存先は /var/spool/cron/crontab の下にある各ユーザのファイルです。このディレクトリにはrootユーザじゃないと入れません。設定ファイルがユーザの見えるところにすぐないので、なんで設定してないのに動くんだ? と不思議に思ってましたが結局これが理由でした。
2.rootでの設定
cron(8)によると基本的には/etc/crontabを設定しろと書いてあります。Debianでは、このファイルの中に/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly のディレクトリ中のファイルを処理するような初期設定がすでに記載されています。またこれもDebian specificとありますが、/etc/cron.dのファイルも読みに行くことになっています。もし/etc/cron.d にファイルを置くときは任意のcrontabの書式のファイルでいいんだけどpermissionは644にしてownerをrootにする必要があります。
あとユーザレベルのcronじゃないのでここにおくファイルはどのユーザが実行するかの設定を中に記載しないといけません。
まとめ
結局raspbianの方はユーザ側で設定していて、もう一台のDebian Linux boxの方はcron.dにファイルをおいていました。書式をすっかり忘れてて、なんでこのシステムではcronを設定してないのにちゃんと仕事が終わってるんだろうと不思議に思ってたというわけ。Linuxだと何かやるのに似た方法がいっぱいあるから、システムポリシーをよく考えておかないとはまりますね。あとcronの設定ファイルの中ではPATHがほとんど設定されてないので変なとこのプログラムが実行されたりするので注意が必要です。