2017-03-20 28 views
1

私の解決策(これまでのところ)は、common-sessionからpam_systemd.soにコメントすることでした。 すべてが制御グループのないsystem.sliceで実行されます。私はまだそのことの影響は確かではありませんが、少なくとも実行されているもの、実行中のもの、そしてシャットダウンをきれいにするものがあります。再起動時にシステムスライスがkillされるのを防ぐ

当社のソフトウェアは、社内で開発され、SLES上で実行されます。 これはjava、oracle、sysadminのtomcat Webページなどです。 これらのプロセスをすべて開始するスクリプトを使用しています。 systemdまで素晴らしい仕事をしています。

"env"スクリプトは、設定ファイルから情報を収集し、java、oracleなどを起動するために他のスクリプトを呼び出します。これらの他のスクリプト "su"は "oracle"のようにユーザに送信されます。

私はこの "env"スクリプトのためのユニットを持っており、起動します。私が "systemctl stop env"を実行すると、Stopが動作します。

私の問題は、リブートするとまず最初にすべてのユーザーが殺され、すべてのDB、Javaプロセスなどです。実際にはうまく停止していないので、基本的にDBをクラッシュさせます。 その後、停止が実行しようとすると、物事がダウンしているためできません。

私は、KillUserProcesses = no、enable-linger、KillExcludeUsers =、systemd-run --scopeを追加しようとしましたが、それらはまだ殺されます。

システムを再起動してもシステムを停止させたり、すべてのサブスクリプトの単位を計算しなくて済むような方法はありますか?

以下の内容は、実際のスクリプトの実行ではなく、問題を再現するためのものです。

私はSLES12SP2(systemd 228)の下でそれを複製することができました。 私はArchマシンを作りましたが、それは殺されませんでした。

私が気づいたことの1つは、スリープ600がsles12のユーザースライスでしたが、アーチのシステムスライスでした。 SLES12上

にsystemd-CGLS:

`-user.slice 
    |-user-1000.slice 
    | |[email protected] 
    | | `-init.scope 
    | | |-1362 /usr/lib/systemd/systemd --user 
    | | `-1371 (sd-pam)               
    | `-session-c1.scope 
    | `-1383 sleep 600 

とアーチ上:

└─system.slice 
    ├─env.service 
    │ └─276 sleep 600 

ユーザーのスライスとセッションがさえアーチ上のsuを使用して作成されていません。

マイサービスファイル:

[Unit] 
Description=Starts and stops applications needed for an environment 
Wants=network.target httpd.service 
After=network.target httpd.service sshd.service 

[Service] 
Type=oneshot 
RemainAfterExit=yes 
ExecStart=/pro/bin/sys/services/envStart.sh start 
ExecStop=/pro/bin/sys/services/envStart.sh stop 
ExecReload=/pro/bin/sys/services/envStart.sh restart 
TimeoutSec=3600 

[Install] 
WantedBy=multi-user.target 

envStartスクリプト:

#!/bin/bash 

case $1 in 
    start) 
     /pro/bin/sys/services/sleep.sh start 
    ;; 
    stop) 
     /pro/bin/sys/services/sleep.sh stop 
    ;; 
esac 

と睡眠スクリプト:

#!/bin/bash 

case $1 in 
    start) 
     echo "starting sleep" 
     su sleepuser -c "sleep 600 &" 
    ;; 
    stop) 
     echo "stopping sleep" 
     sleep 300 
    ;; 
esac 
+0

サービスファイルを投稿できますか?あなたが何か変わったことをしているように私に聞こえる – nir0s

答えて

0

私のソリューションは、(今のところ)pam_systemd.soコメントしましたコモンセッションからすべてが制御グループのないsystem.sliceで実行されます。私はまだそのことの影響は確かではありませんが、少なくとも実行されているもの、実行中のもの、そしてシャットダウンをきれいにするものがあります。

関連する問題