Home

技術系のメモと日々の雑感

cron ジョブの設定ミス

1 分間に複数回実行する cron ジョブの設定をミスしていた。

* * * * * /root/hoge.sh; sleep 30; /root/hoge.sh

としていたんだけど、この hoge.sh が 15 秒ぐらいかかっているのに気付かないまま数ヶ月・・・。
これだと、毎分 0 秒ぐらいに hoge.sh が開始されて、それが終わってから 30 秒待って、再び hoge.sh が開始されてしまう。
つまり、後の方の hoge.sh は 45 秒ぐらいから始まるので、0 秒前後に同時に 2 つ走っている可能性があるわけだ。
sleep の値を短くしてもいいけど、スクリプトの実行時間は一定ではないから、無理して 1 行にまとめない方がよさそう。

* * * * * /root/hoge.sh
* * * * * sleep 30; /root/hoge.sh

こう書くのが一般的なんだね。

iptables で VRRP のアドバタイズパケットを通すには

とあるサーバを VRRP で冗長化することにした。
keepalived の設定は過去に調べたことがあったのですぐに終わったけど、iptables を通すところでつまづいた。
VRRP では、アドバタイズ用にマルチキャストアドレス 224.0.0.18 を使っているらしく、これがうまく通らないのだ。
マルチキャストは上位4ビットが決まっているだけで、クラスの概念がないということで、試しに

iptables -A INPUT -d 224.0.0.0/4 -j ACCEPT
iptables -A OUTPUT -d 224.0.0.0/4 -j ACCEPT

などと書いてみても駄目。
サブネットマスクをあれこれ変えてみても同じだった。
その後、さんざん調べて何とか解決。

iptables -A INPUT -p vrrp -j ACCEPT
iptables -A OUTPUT -p vrrp -j ACCEPT

という風にプロトコルで指定しないといけないんだね。
なるほど。
分かってしまえば簡単。

ログに出力されるホスト名を変えるには

とあるサーバで /var/log/maillog を眺めていたら、ログに出力されているホスト名が間違っていることに気づいた。
実はこのサーバ、Xen の Domain-U 上にある。
ひな型のディスクイメージをコピーした後、ホスト名を変更するのを忘れて運用を始めてしまったのだ。
まずい!
慌てて変更したものの、ネットワークをリスタートしても正しいホスト名が反映されない。
過去に何度も同じパターンに遭遇してるのに、そういえばいつも安直にリブートしていたんだった。
ログはどんどん出力され続けている。
いっそ見なかったことに・・・、って何を考えているんだ!
これはもうリブートしかないのかと諦めかけたそのとき、どこからともなく神の声が。
「syslogd をリスタートしてみなさい」
助かった。
syslogd(正確には sysklogd)って、起動したときに設定されていたホスト名をず〜っと使い続けるんだね。

Nagios で Error: Could not open command file

ずっと前に入れた Nagios の、その後の話。
Host Information や Service Information からコマンドを実行できることは知っていたけど、使用頻度が低いので動作確認はしてなかった。
そうこうしているうちに、この前、緊急でアラートメールを止めないといけなくなって、初めて試してみたら見事にエラー。

Error: Could not open command file '/usr/local/nagios/var/rw/nagios.cmd' for update!

コマンドを実行したときに更新されるファイルの書き込み権限がないらしい。
しばらく情報を漁ってみて、確認すべきところが分かった。
Nagios が /usr/local/nagios にインストールされている場合を例にすると、

■ /usr/local/nagios/var/rw のパーミッションが 2775 になっていること
■ httpd の実行ユーザが nagcmd グループに属していること

の2点だ。
ひとまず忘れないようにメモ。
これで次にアラートメールが飛んできても焦らずに済むかな。

Intel DQ45CB でトラブル

Intel DQ45CB新品の Intel DQ45CB でトラブルに遭遇。
Celeron Dual-Core E3200、メモリ 2GB といった構成でひと通り組み終わって、電源ケーブルをつないだらいきなり電源が入った。
このマザーボードを触るのは初めてではなかったし、前にも同じような動きをした記憶があったので、慌てず騒がず様子見。
すると、間もなく電源が切れてしまった。
どこかで結線ミスをしたのかと思って調べようとしたら、また電源が入って切れるの繰り返し状態に・・・。
モニタには何も表示されない。
どうやら信号すら来てないようだ。
切り分けのために、メモリを抜き挿ししたり、CPU やクーラーの状態も確認してみたけど変化なし。
ダメ元で CMOS バッテリーを抜いて、マザーボード上のジャンパピンを外して Recovery の状態にしてみたら、一瞬だけ Intel のロゴが表示された。
CMOS バッテリーはマザーボードに付いてきたものだったので、ひょっとしてこれが悪さをしているのかと思って交換してみたけど、電源が入ったり切れたりする現象は変わらず。
で、電源ユニット Seasonic SS-250SU は古いのを使い回していたので、別のにつなぎかえてみたら、やっと起動できた。
CentOS も問題なく入って、ひと安心。
・・・かと思いきや、交換した電源ユニットをケースにきちんと組み込んだら、また起動できなくなってしまった。
やっぱり初期不良なのかとあきらめかけたところに、どこからともなく神の声が!
マザーボードの底面がケースと接触しているかもしれないので、別のケースに移動してみてはどうか、とのこと。
やってみると、ばっちり動作した。
そういうことだったのか〜。
結局、マザーボードには何の問題もなかったんだね。
またひとつ勉強になった。