水曜日, 9月 13, 2006

プロセスが複数起動するのを防ぐ - start-stop-daemon

というわけで、前回のautosshを使ったポートフォワーディング。
autosshがsshを監視、再起動してくれるのでこのプロセスはひとつでいいわけです。

まあ、その気になればそんなスクリプトはすぐに書けるわけですが、こんな機能ないわけないよ。
ってわけで、start-stop-daemon。
このコマンドを使って管理することができます。

start-stop-daemon --stop --pidfile /var/run/autossh/pop3.pid --signal 0 --quiet || start-stop-daemon --start --pidfile /var/run/autossh/pop3.pid --chuid user1:user1 --background --make-pidfile --exec /usr/bin/autossh -- -M 0 -gN -b 192.168.0.1 -l user1 -i /home/user1/.ssh/id_dsa -L 10110:localhost:110 pop3.kumicho.net

こんな感じ。
これで複数のプロセスが起動することはありません。
ここでは、
1.pop3.pidに書かれたプロセスが存在する場合は起動しない
2.そうでなければ、所有者user1:user1のautosshプロセスを起動して、そのプロセスIDをpop3.pidに書き込む
ということをやっています。

このstart-stop-daemon、他にもchrootの機能なんかもあっておもしろいです。
つーか、これ使ったら、ユーザーの変更やpidファイルおよびプロセスの管理、chrootの機能をプログラムに持たせる必要ないのでは?
多くのプログラムがなんでそういう機能を自前で持っているのか理解に苦しみますね。

0 件のコメント: