« サーバー復旧奮戦記(3.セキュリティー強化) | メイン | サーバー復旧奮戦記(5.自動起動) »

2017年12月14日 (木)

サーバー復旧奮戦記(4.tomcat が止まってしまう(1)・・・今はまっています)

一応の動作がOKなので、サーバー起動時に自動起動するように設定しようとしているのですが・・これ、次のような理由で必要だと思うんです。たとえば、UPS が持ちこたえられないほど長時間の停電があった場合、電源が復旧すればサーバー機は再起動するのですが、 tomcat は起動しない。tomcat を動かすためのサーバー機なんで、tomcat が動かないのでは意味がない。

やっているうちに、停電でもOSシャットダウンでもないのに tomcat が止まる事があるのに気づきました。sh startup.sh で起動した場合は、シェルを閉じれば tomcat も止まる・・これはいいんですけど /etc/init.d/tomcat start としても止まる場合がある。あ~でもない、こ~でもないとやったあげく、ログアウトすると止まるのを見つけました。

まず起動スクリプトに nohup を追加・・・NG・・・次に catalina.sh にある USE_NOHUP を true にしてテスト。これもNG。なんで?

tomcat を起動した状態でプロセスを見てみると、tomcat の親プロセスは /lib/systemd/systemd --user となっていました。ログアウト~ログインしてプロセスを見ると /lib/systemd/systemd --user がいない。ググりまくった結果、【OSのある部分のデフォルト値が変わった】という記事がありました。systemd の KillUserProcesses のデフォルト値が「no」から「true」に変わったとのこと。/etc/systemd/logind.conf には #KillUserProcesses=no と記述されていました。systemd が止めてくれていたようです。

このような変更は「何らかの理由」があって行われたと思うので、「KillUserProcesses = no」とすると副作用がありそうですが、とりあえず #KillUserProcesses=no を KillUserProcesses=no に変更してテストしてみました。ログアウトしても動いているように
見えたのですが、しばらくすると止まってしまいます。止まるまでの時間もまちまちで、たまたま止まった時に他の操作していたりすると「こいつが原因か」と思ったりして、泥沼状態です。

この状態で自動起動を設定して、もしうまくいったとしても、メンテナンスなどで手動で停止~起動をすると、ログアウトすれば止まってしまうわけで・・・システム全体を再起動もいやだし・・・loginctl enable-linger も必要だとかいう記事も見つけたのですが、これはこれで不安定な所があるみたいだし・・・。

この点以外には問題はないので、当面は現状のまま・・「ログアウトしてはいけない」という、とんでも仕様でやる事にしようか。疲れた。

という所で気付きました。なんで systemd が登場するの?

調べてみたら、OS前回のバージョンから systemd が導入され、現バージョンでは systemd だけになったようです。/etc/init.d 以下を「古いスタイルで」動かす場合も systemd が「それらしく」動かしてくれるらしい。なんか、解決の糸口がつかめたようです。

コメント

コメントを投稿