2017-03-20 54 views
1

我的解决方案(到目前为止)是从common-session评论pam_systemd.so。 一切运行在没有控制组的system.slice中。我不确定这样做的影响,但至少可以运行,保持运行,并干净地关闭。停止systemd在重新启动时杀死用户片

我们的软件是在内部开发并运行在SLES上的。 这是java,oracle,sysadmin的tomcat网页等。 我们有一个脚本,我们一直在使用它来启动所有这些进程。 一直工作很好,直到systemd。

的“ENV”脚本收集从配置文件信息,然后调用其它脚本来启动Java,Oracle等这些其他脚本“苏”像“甲骨文”的用户。

我有这个“env”脚本的单位,并开始工作。如果我运行“systemctl stop env”,停止工作。

我的问题是,在重新启动的第一件事是所有的用户都杀了,因此都将DB,java程序等,基本上崩溃的DB,因为他们真的没有很好地停止。 然后停止尝试运行,因为东西不能运行。

我已尝试添加KillUserProcesses =无,使-流连忘返,KillExcludeUsers =,systemd运行--scope,他们仍然会被杀掉。

有什么办法已经systemd不INSTA杀在重新启动用户或我坚持必须弄清楚单位所有的子脚本?

下面的东西只是为了复制这个问题 - 而不是实际的脚本运行。

我能够与下面复制它SLES12SP2(systemd 228)。 我建立了一台Arch机器,并没有杀死它。

一件事我注意到,这是不同的是,睡眠是600上sles12用户切片但弓系统片。

上SLES12 systemd-CGLS:

`-user.slice 
    |-user-1000.slice 
    | |-use[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 

用户切片和会话,甚至没有与苏拱创建。

我的服务文件:

[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中。我不确定这样做的影响,但至少可以运行,保持运行,并干净地关闭。

相关问题