我想systemd首次。我要开始在系统引导的过程。而我在得到它运行起来有问题。
systemd要运行脚本(start.sh)。该脚本将启动一个进程(可以称之为P)在后台与代码清零p退出继续运行,直到永远的信号happends。
如果我start.sh手动运行一切正常。
如果我让它开始由systemd P获取后立即开始SIGTERM和终止。
所以上手但什么信号?它结束P和我不知道什么它的起源和它的原因。
也许我的单位是错误的,但我不知道如何设置为我的需求。我试着服务型简单,闲置和单稳。
感谢帮助!克里斯
这是我的单位。
[Unit]
Description=Test
After=sshd.service
[Service]
Type=oneshot
ExecStart=/home/max/start.sh start
Restart=no
User=root
SuccessExitStatus=0
[Install]
WantedBy=multi-user.target
这就是现状。
Loaded: loaded (/etc/systemd/system/test.service; enabled)
Active: inactive (dead) since Die 2016-02-23 20:56:59 CET; 20min ago
Process: 1046 ExecStart=/home/max/test.sh start (code=exited, status=0/SUCCESS)
当start.sh完成,systemd杀死一切都在同一cgroup中的start.sh
你的选择是:
我想在您的情况选择2是可行的,更简单。
虽然改变KillMode
到process
像下面会在你的情况下工作,它不是推荐的解决方案。
[Service]
KillMode=process
...
与KillMode
设置为process
的问题是,在systemd
它开始的过程中所有的孩子都失去了控制。这意味着,如果有什么事情发生,你的流程的一个不出于某种原因死了,它会继续萦绕。
在您的情况更好的解决方案是创建的所有流程,keep their pid
,然后对他们wait。
你在你的shell脚本中使用等待命令可根据其外壳使用的是(我提出的链接是bash)的不同而不同。具有shell脚本等待所有的孩子实际上是一样的开始一个孩子,这没有得到分离,在前台。
因此,像这样,或多或少:
#!/bin/bash
# Start your various processes
process1 &
PROCESS1_PID=$!
process2 &
PROCESS2_PID=$!
process3 &
PROCESS3_PID=$!
# Wait on your processes
wait $PROCESS1_PID $PROCESS2_PID $PROCESS3_PID
# OR, if I'm correct, bash also allows you to wait on all children
# with just a plain wait like so:
wait
# reach here only after children 1, 2, and 3 died