Systemd envía la señal de salida al service al inicio

Este es mi service de sistema en ubuntu 16.04:

[Unit] Description=Starts Caspar CG [Service] Type=forking WorkingDirectory=/home/broadcastingza/CasparCG/Server Environment=DISPLAY=:0 ExecStart=/bin/sh ./run.sh --watch StandardOutput=null Restart=on-failure [Install] WantedBy=multi-user.target graphical.target 

EDITAR: Esta es la salida del estado de sudo systemctl -l

 sudo systemctl status start-caspar.service -l ● start-caspar.service - Starts Caspar CG Loaded: loaded (/etc/systemd/system/start-caspar.service; enabled; vendor preset: enabled) Active: inactive (dead) since Tue 2017-03-21 17:04:28 SAST; 1 day 16h ago Process: 5198 ExecStart=/bin/bash -c ./run.sh --watch (code=exited, status=0/SUCCESS) Mar 21 17:04:14 ZAPS001 systemd[1]: Starting Starts Caspar CG... Mar 21 17:04:28 ZAPS001 systemd[1]: Started Starts Caspar CG. 

Este service se habilita y funciona bien. No hay problemas para iniciarlo manualmente tampoco. El único problema que tengo es que tan pronto como se ejecuta el script de shell ("run.sh"), el server se inicia y luego recibe una señal EXIT, y sale con el código EXIT 0. Es casi como si el server requiere el console para estar abierto todo el time.

Cuando ejecuto exactamente el mismo script desde la console, funciona perfectamente bien.

¿Hay alguna manera de comenzar el service sin salir de la console inmediatamente, o hay una manera de comenzar el service independientemente de la console en primer lugar?

Mis disculpas a todos. Esto parece ser un problema conocido en el binary que estoy tratando de ejecutar sin cabeza (casparcg). Ver: https://github.com/CasparCG/Server/issues/529

La solución sugerida es instalar la pantalla (o tmux) para ejecutar el terminal en modo separado. Lo tengo funcionando usando la pantalla.

  1. Pantalla de installation:

    sudo apt install screen

  2. Esta es la línea de código para usar en el service systemd después de la installation:

    screen -d -m /path/to/your/script.sh

-d separa la terminal, -m ignora $ STY.

  1. Ajuste el service systemd en consecuencia:

    [Unit]
    Description=Starts Caspar CG

    [Service]
    Type=forking
    Environment=DISPLAY=:0
    StandardOutput=null
    ExecStart=/bin/sh -c "screen -d -m /usr/bin/start_caspar.sh" --watch
    Restart=on-failure
    User=broadcastingza

    [Install]
    WantedBy=multi-user.target graphical.target

Ahora puedo ejecutar el server separado.

¡Gracias por la ayuda!