Search code examples
linuxsystemd

systemd: SIGTERM immediately after start


I am trying systemd for the first time. I want to start a process at system bootup. And I have a problem in getting it up and running.

systemd should run a script (start.sh). This script starts a processes (lets call it P) in the background and exits with code 0. P keeps running forever till a signal happends.

If I run start.sh manually all is ok.

If I let it start by systemd P gets immediately after the start a SIGTERM and terminates.

So it get started but what about the signal?? It terminates P and I am not sure whats its origin and the reason for it.

Maybe my unit is wrong but I have no idea how to set it for my needs. I tried service-type simple, idle and oneshot.

Thanks for help! Chris

Here is my unit.

[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

Thats the status.

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)

Solution

  • When start.sh finishes, systemd kills everything in the same cgroup as start.sh

    Your options are:

    • setting KillMode in the Unit section to process (the default is control-group). That will cause systemd to only kill the process which it directly fired.

    • to not make start.sh start something in the background and exit but to execute it right there in the foreground

    I think in your situation option 2 is viable and more straightforward.

    Source: https://unix.stackexchange.com/a/231201/45329