我的解决方案(到目前为止)是从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
你可以发布你的服务文件吗?听起来像你在做一些很奇怪的事情 – nir0s