当社では、次の問題が発生しました。 「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