crondでハマった
以前、とある人物に、午前6時から午前8時まで1分おきに同じ内容の携帯メールを延々と送り続けられたことがある。
その人物は6時と7時の2回メールを送りたかったらしいのだが、どうもcrontabの設定を間違えていたらしい。
メールの宛先が僕だったのは非常に残念なことである。
こういう素敵な過ちは、ぜひとも公的な場面で、お取引先企業様などにやっていただきたかった。
さて、それ以来cronでハマることなどなかったのだが、今日ちょっと困ったことがあった。
昨日掲載したグローバルIP更新スクリプトなのだが、/etc/cron.hourly入れておいても僕のFedora12環境では動作しなかったのだ。
スクリプトを /etc/cron.hourly に放り込んだ後、Global IPアドレスの変更をしてそのまま寝てしまったのだが、朝起きてみるとgmailにメールは来ていなかった。
単発でscriptを動かしたときは問題なかったので、crondの何かがおかしいと思い、ちょっと調べてみた。
結論から言うと、/etc/cron.d/0hourly の次の1行が原因。
HOME=/
昨日のエントリーの隅っこに以下のようなことを書いた。
*3:ぼくの場合は、require '~/lib/passdb'等の名前で外部ファイルにまとめて書いてるけど
ぼくは、~ 内のとある場所に パスワードデータベースファイルを作成し、アカウント情報などはそこから引っ張ってくるようにしている。
スクリプトでは、素のファイルを参照するために
require '~/....' と言う指定の仕方をしていたため、$HOMEが書き換えられてしまったら当然動かなくなってしまうのであった。。。
修正方法としては、
- require 文を絶対パスで記述する
- /etc/cron.d/0hourly から HOME=/ の記述を削除
- /etc/cron.d/update_global_ip などの名前で新しい定義を書く
くらいが考えられるが、ぼくは3つ目のやり方で対処した。
# vi /etc/cron.d/update_global_ip 1 * * * * root /root/script/update_global_ip.rb