2ヶ月ほど連続稼動させたところで、急にファックスが受信できなくなってしまった。
とりあえず、IAXmodemと、hylafax+と、Asterisk の再起動を行った。
ところで、IAXmodemと、hylafax+の再起動において、その順序に注意が必要だったのでメモを残しておく。
<使用したバージョンについて>
hylafax+(5.5.9) は、CentOSにおいてyum(epelリポジトリ利用)で導入したものである。
IAXmodem(1.2.0)は、ソースから導入した。
■まず、Hylafax IAXmodemの関係について、faxgettyというプログラムと共に整理した。
IAXmodemは、動作中、/dev/IAXmodem のように、設定に応じたデバイスファイルを存在させる。
hylafaxは、faxgettyというプログラムでそれらのデバイスファイルとの関係を得る。
(例)
# /usr/sbin/faxgetty /dev/IAXmodem &
だから、IAXmodemを起動して、その後、hylafax+を起動し、そしてfaxgettyを実行する必要がある。
■以下では、Hylafax+と、IAXmodemの再起動時の挙動を調べた。
○IAXmodemを再起動する場合 (Hylafaxは起動したままである。)
最初の状態である。faxgettyが動作している。
# ps -aef | grep faxgetty
uucp 18305 1 0 04:15 pts/21 00:00:00 /usr/sbin/faxgetty /dev/IAXmodem
サービスを停止する。
# service iaxmodem stop
すでに実行中のfaxgettyは動作したままになってしまった。
# ps -aef | grep faxgetty
uucp 18305 1 0 04:15 pts/21 00:00:00 /usr/sbin/faxgetty /dev/IAXmodem
しかし、2分ほど待ってから、調べてみると、動作していたfaxgettyのプロセスは消滅した。
# ps -aef | grep faxgetty
root 18844 9964 0 04:17 pts/21 00:00:00 grep faxgetty
このとき、Hylafaxから以下のメールを受け取った。
Hylafaxが、faxgettyの引数に渡していたIAXmodemデバイスが利用できないことを検知したようである。
そのために、対応のfaxgettyプロセスはHylafaxによって消滅させられたのだと思う。
# tail /var/spool/mail/root
The HylaFAX software thinks that there is a problem with the modem
on device /dev/IAXmodem that needs attention; repeated attempts to
initialize the modem have failed.
Consult the server trace logs for more information on what is happening.
You will be notified again after 5 minutes if the problem persists.
サービスを再び起動した。
# service iaxmodem start
○Hylafax+を再起動する場合 (IAXmodemは起動したままである。)
# ps -aef | grep faxgetty
uucp 18094 1 0 04:00 pts/21 00:00:00 /usr/sbin/faxgetty /dev/IAXmodem
サービスを停止する。
# service hylafax+ stop
しかし、これだけでは、すでに実行中のfaxgettyは動作したままになってしまった。
5分ほど放置してみたが、状況には変化がなかった。
faxgettyを監督しているHylafax本体が起動していないため、faxgettyは終了しないのだろうと思う。
# ps -aef | grep faxgetty
uucp 18094 1 0 04:08 pts/21 00:00:00 /usr/sbin/faxgetty /dev/IAXmodemそして、サービスを再び起動した。
# service hylafax+ start
サービスを再び起動した時に、動作していたfaxgettyのプロセスはただちに消滅した。
hylafaxは起動時には、動作しているfaxgettyプロセスを一掃するのではないかと思う。
■Hylafaxと、IAXmodemを再起動するためのスクリプトを作成した。
Hylafaxと、IAXmodemの再起動には、上記の性質を考慮して行う必要がある。
以下の手順で、Hylafaxと、IAXmodemを再起動すると良いだろう。
(1)Hylafaxの再起動(これによって、古いfaxgettyプロセスが消滅する。)
# service hylafax+ restart
古いfaxgettyプロセスはただちに一掃された。
# ps -aef | grep faxgetty
root 20339 9964 0 04:34 pts/21 00:00:00 grep faxgetty
(2)IAXmodemの再起動
# service iaxmodem restart
(3)faxgettyをIAXmodemを引数につけて実行する。
# /usr/sbin/faxgetty /dev/IAXmodem &
# ps -aef | grep faxgetty
uucp 20417 1 0 04:37 pts/21 00:00:00 /usr/sbin/faxgetty /dev/IAXmodem
(スクリプトにまとめた)
次のような再起動用スクリプトを作成したところ、うまく動作した。
念のため、待機時間を5秒挿入している。
例ではモデム数は一個だけだが、テスト環境においては20個程度存在していた。
(Asteriskは再起動に時間を要する場合があるので、一番最後が良いかもしれない。あるいは充分なウェイトを置いて最初に行う。)
/sbin/service hylafax+ restart
/bin/sleep 5s
/sbin/service iaxmodem restart
/bin/sleep 5s
/usr/sbin/faxgetty /dev/IAXmodem &
(注意)
逆の手順でIAXmodemから先に再起動させた場合、正しく動作しなかった。
モデムが全て、waiting 状態のままになってしまった。
■ところで、defunctってなんだろうか。
uucp 20419 1 0 04:37 pts/21 00:00:00 /usr/sbin/faxgetty /dev/IAXmodem1
uucp 20420 1 0 04:37 pts/21 00:00:00 /usr/sbin/faxgetty /dev/IAXmodem2
uucp 20421 1 0 04:37 pts/21 00:00:00 /usr/sbin/faxgetty /dev/IAXmodem3
uucp 20446 20419 0 04:37 ? 00:00:00 [faxgetty] <defunct>
uucp 20447 20420 0 04:37 ? 00:00:00 [faxgetty] <defunct>
uucp 20484 20420 0 04:49 ? 00:00:00 [faxgetty] <defunct>
uucp 20485 20419 0 04:49 ? 00:00:00 [faxgetty] <defunct>
root 20528 9964 0 04:58 pts/21 00:00:00 grep faxgetty
着信を受けたIAXmodemに対応するfaxgettyプロセスについて、defunctとなった。
無害のようである。参考になるページを見つけた。
<参考>
・RE: [hylafax-users] "Waiting for modem to come ready" another
< http://www.hylafax.org/archive/2010-11/msg00128.php > 2017年6月24日
・Re: [hylafax-users] faxgetty <defunct> - 'Extra' FaxGetty
< http://www.hylafax.org/archive/2006-01/msg00322.php > 2017年6月24日