wiz.code

XMailのサービス登録

XMailの自動起動

XMailが起動していない

仮想マシン(CentOS)を再起動すると、XMailが起動していない状態に…。 CentOS7から、サービスの起動方法が変更されたようで、init.dディレクトリに起動スクリプトを置いても、システム起動時に実行されなくなりました。

CentOS7では、サービスの登録や起動はSystemd(システム管理デーモン)によって行われます。 XMail(1.27)はSystemdの機構が出来る前のバージョンなので、Systemdによるサービス登録には対応していません。 このようなケースに対応するため、CentOSでは、init.dに設置された起動スクリプトを実行するための設定ファイルを自動的に生成します。

自動生成されたユニットファイル

/run/systemd/ganarator.late/ ディレクトリを見ると、xmail.service があります。 このファイルをサービス型の「ユニットファイル」と呼ぶようです。

XMailのユニットファイルの中身

ファイルを開いてみると、ExecStartにXMailの起動スクリプトを呼び出すパラメータが設定されているのが分かります。

サービスの登録

ユニットファイルが生成されている、ということは、systemctlがサービスとして認識しているのかどうか。 それを確かめるために、systemctlコマンドでstatus xmail.serviceを指定してみます。

SystemdとXMail
# systemctl status xmail.service

結果は未稼働(inactive)ですが、認識されているようです。 ためしに起動してみましょう。

systemctlで起動(成功)・登録(失敗)
# systemctl start xmail.service

起動したようなのでtelnetで接続してみたところ、ちゃんと応答しています。 サービスを有効にするために、enableも実行しておきます。

# systemctl enable xmail.service
xmail.service is not a native service, redirectiong to /sbin/chkconfig.
Executing /sbin/chkconfig xmail on

XMailはNative Serviceではない、と言われ登録できませんでした。 メッセージからは chkconfigに対してxmail onというパラメータを与えているように見えます。

chkconfigは、システム起動時に実行するサービスの有効・無効を設定するためのコマンドのようです。 単独で実行すると一覧が見られるらしいので、実行してみます。

chkconfigの一覧
# chkconfig

ここで出てきたのは、netconsoleとnetworkの2つだけでした。 httpdやその他のサービスは、すでにsystemdで管理されるようになっているので、ここには出てこないんですね。

そして、ここで気になるキーワード「SysV」が出てきました。 注記に「この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。」とあります。 そういえば、XMailのインストール手順を翻訳しているときに、いまいち意味の分からなかった工程がひとつありました。

  1. Use the 'sysv_inst.sh' shell script (from root user) to create SysV boot script - unless your distro has other tools to do this.

    「そのディストリビューションにこれをするための他のツールがなければ、 'sysv_inst.sh'シェルスクリプトを使って、Sysvブートスクリプトを作ってね。(rootユーザで実行するんだよ)」

SysVもまた、自動起動に関するキーワードで、プロセスの分類(runlevel)を指定することができるようです。 ざっくりと、はじめに「init.d」があって、そのあとに「SysV」や「chkconfig」が出来て、今は「systemd」に統合されている、という認識でいいのかな。 んで、XMailはinit.dとsysvに対応していて、systemdには未対応。 systemdに未対応の場合、sysvまでは自動的にユニットファイルが作られる、と。

上記のXMailの説明は「init.dが使えなかったら、sysv_inst.shをルート権限で実行すれば、SysV用の起動スクリプトを作りますよ」と理解できます。

試しにsysv_inst.shを実行してみましょう。

sysv_inst.shを実行
# /home/wiz/xmail-1.27/sysv_inst.sh

あら? すでにある、と言われました。

むむ…、だんだん手詰まりになってきたぞ…。

でも、だとしたらなぜchkconfigの一覧に出てこないのだろう? 追加してないから、か…。 じゃぁ、追加してみよう。

chkconfigにxmailを追加(失敗)
# chkconfig --add xmail
サービス xmail は、checkconfig をサポートしていません。

ぐはっ。 対応していない…だと?

あれ…、詰んだ?

XMailの起動スクリプトをchkconfigに対応させる

起動スクリプトをchkconfigに対応させるためには、コメントでchkconfig:とdescription:の2つを記述すればよい、という情報をゲット。 このうち、chkconfig:には、ランレベル、起動時の優先度、終了時の優先度を指定するんだとか。

ランレベルを把握しなければ。

  1. シングルユーザー(CUI)
  2. マルチユーザー(ネットワークなし)
  3. マルチユーザー(CUI)
  4. 未使用
  5. マルチユーザー(GUI)
  6. 再起動

なお、0の場合はシャットダウンを表します。 情報を見渡すと、「2345」を指定しているケースがよくあるので、これでいきましょう。 /etc/rc.d/init.d/にある、networkの起動スクリプトにも「2345 10 90」とあるので、同じに設定すればいいかな。 んじゃ、xmailの起動スクリプトを書き換えます。

xmail起動スクリプトをchkconfig対応に
# vi /etc/init.d/xmail

descriptionはなんかそれっぽく書いておきました。 説明文だから、なんでもいいと思います。

改めてchkconfigに追加し、リストを確認したらxmailが追加されていました。

xmail起動スクリプトをchkconfig対応に
# chkconfig --add xmail
# chkconfig

そしたら、systemctlでサービス登録できるかな?

systemctlでサービス登録(失敗)
# systemctl enable xmail

うん! 出来ない♪

ってゆーか、chkconfigに登録されたんだったら、これで自動起動するんじゃないか? 一度再起動してみよう。

再起動しました。 ログイン前にホストコンピュータからtelnetで接続しようとしてもつながらなかったので、ファイアウォールを確認したら、チェックした項目(ftp,http,smtp,pop3)がすべて外れていました。

ファイアウォールの設定選択

よく見たら、設定のところに「実行時」とあって、選択肢に「永続」が…。 ファイアウォールの設定が戻ってしまったのは、GNOMEをインストールし直したからではなく、ここの設定方法が間違っていたからだったようです。

設定を「永続」にして、ftp,http,smtp,pop3をそれぞれチェック。 永続設定は再起動で有効になるようなので、もう一度再起動します。

XMailの自動起動を確認

CentOSにログインする前にホストコンピュータからtelnetで接続したら、XMailが応答しました。 これで自動起動成功です♪

微調整

XMailの起動・終了優先度調整

流れでhttpd(Apache)のランレベルを調べていたら、起動優先度が15、終了優先度が85となっていました。 ネットワークが確立してから起動し、遮断される前に終了、という優先度にしていると判断。 なので、XMailの優先度も同じく15 85に変更しておきました。

この章のまとめ

  • XMailはchkconfigで自動起動させることができる。
  • chkconfigに対応させるためには、起動スクリプトにchkconfig:とdescription:が必要。
  • ファイアウォールは「永続」にしてから設定しないと再起動で元にもどる。