systemdを使用して再起動/終了時にSAP Hanaを正しく停止することはできません。

systemdを使用して再起動/終了時にSAP Hanaを正しく停止することはできません。

当社では、次の問題が発生しました。 「SAP HANA S/4」を実行する複数の Red Hat Enterprise Linux サーバーがあります。再起動またはシャットダウン時にシステムと手動で対話する必要がないように、デーモンを自動的に起動および停止するsystemdサービスを作成しました。

自動起動はうまく機能しますが、シャットダウン時にデーモンを正しく停止するのに問題があるようです。デーモンは別のユーザー(サーバーごとに1人)で実行されています。実際のサービスが停止する前に systemd がユーザーセッションの終了を開始するように見えるため、サービスは正常に停止しません。

提供する

[Unit]
Description=saphana
After=remote-fs.target user.slice sapinit.service multi-user.target
Requires=user.slice

[Service]
KillMode=none
Type=oneshot
ExecStart=/hana/source/scripts/sapHanaControl.pl start
ExecStop=/hana/source/scripts/sapHanaControl.pl stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

ExecStart および ExecStop で呼び出されるスクリプトは、デフォルトで次のコマンドを実行します。

開始時間:

"sudo -u $username csh -c "sapcontrol -nr $instance -function Start"

停止したとき: "sudo -u $usernamecsh -c"sapcontrol -nr $instance-function 停止"

終了ログ

Systemd ログ出力には次のものが表示されます。

Jun 20 16:23:05 host123 systemd[1]: Stopping Session c4 of user **userxy**.
Jun 20 16:23:05 host123sapHanaControl.pl[15003]: sudo -u **userxy** csh -c "sapcontrol -nr 00 -function Stop"
Jun 20 16:23:05 host123 sapHanaControl.pl[15003]: 20.06.2018 16:23:05
Jun 20 16:23:05 host123 sapHanaControl.pl[15003]: Stop
Jun 20 16:23:05 host123 sapHanaControl.pl[15003]: FAIL: NIECONN_REFUSED (Connection refused), NiRawConnect failed in plugin_fopen()

修正する

システムが正常に実行されると、次のプロセスが実行されていることがわかります。

[root@wsstadt325 ~]# ps -ef | grep sapstartsrv
d61adm    1740     1  0 11:56 ?        00:00:01 /usr/sap/D61/HDB05/exe/sapstartsrv pf=/usr/sap/D61/SYS/profile/D61_HDB05_wsstadt325 -D -u d61adm
sapadm    1741     1  0 11:56 ?        00:00:04 /usr/sap/hostctrl/exe/sapstartsrv pf=/usr/sap/hostctrl/exe/host_profile -D
d21adm    1946     1  0 11:56 ?        00:00:02 /usr/sap/D21/ASCS01/exe/sapstartsrv pf=/usr/sap/D21/SYS/profile/D21_ASCS01_wsstadt325 -D -u d21adm
d21adm    2182     1  0 11:56 ?        00:00:02 /usr/sap/D21/D00/exe/sapstartsrv pf=/usr/sap/D21/SYS/profile/D21_D00_wsstadt325 -D -u d21adm` 

システムが再起動されたとき、または電源が切れたときに「ps -ef | grep sapstartsrv」出力を記録するようにスクリプトを変更しました。

ps -ef | grep sapstartsrv
sapadm    1683     1  0 13:52 ?        00:00:01 /usr/sap/hostctrl/exe/sapstartsrv pf=/usr/sap/hostctrl/exe/host_profile -D
root      5706  5522  0 14:00 ?        00:00:00 sh -c ps -ef | grep sapstartsrv
root      5708  5706  0 14:00 ?        00:00:00 grep sapstartsrv

sapstartsrvサービスは、私のSystemdサービスの前に開始されるデフォルトのSAPサービス(sapinit)によって開始されます(したがって再起動すると逆の順番です[My Systemdサービスの停止 - > Sapinitサービスの停止])。問題はsystemctlが終了し始めているようです。実際のSystemdサービスが停止する前にsapstartsrvプロセスが実行されていたユーザーセッション(私の場合はユーザー:d21admとd61adm)。 (これは少なくとも少し意味があることを願っています)

以下はシステムチェーン全体のイメージです(私のサービスは最後にあります)。関連サービス: - sapinit.service(基本サービス) - saphana.service(マイカスタムサービス)

イメージシステムチェーン

答え1

次のナレッジベースで説明されているように、問題の原因を見つけてください。 https://www.suse.com/de-de/support/kb/doc/?id=7022671

Systemdは90秒後に各user.sliceを終了します(このタイムアウトは変更できません)。 systemdはpam.dを変更しないとSAP HANAインスタンスを自動的に停止できないようです。ここで説明されている解決策は少し「ハッキング的な」ようですが、うまくいきます。

cp /etc/pam.d/system-auth /etc/pam.d/custom-su-session
vim /etc/pam.d/custom-su-session

"session option pam_systemd.so"の前に次の行を挿入します。

session [success=1 new_authtok_reqd=ok default=ignore] pam_listfile.so item=user sense=allow file=/etc/custom-su-session

この行は、suコマンドが実行され、ユーザーが/ etc / custom-su-sessionファイルにリストされているときにuser.sliceの生成をスキップします。

vim /etc/pam.d/su

session include system-auth 使用。 。 。交換session include custom-su-session

関連情報