Eu uso aqueles para Sick Beard e SabNZBd, dois aplicativos python / cherrypy. A diferença é saber quando usar 'forking'. Isso basicamente diz ao systemd que o binário principal irá bifurcar coisas, então ele tem que adivinhar o PID de um arquivo.
WantedBy
é apenas para definir o alvo que irá requerer isto para iniciar, pense nele como runlevel. Você também notará que a segunda definição usa um diretório para manter as informações de execução, isso porque cria um $process-$port
para cada daemon iniciado (você pode ter muitos daemons gerados pelo principal em portas diferentes).
IMO você pode adicionar o script no ExecStart e certificar-se de que ele é forking
e adicionar uma maneira de encontrar o arquivo PID principal, ou pelo menos um arquivo PID que significa "se estiver morto, reinicie o serviço".
Talvez o ideal seja criar um arquivo de serviço com 'simples' para cada daemon?
[Unit]
Description=Internet PVR for your TV Shows
After=cryptsetup.target
[Service]
ExecStart=/usr/bin/python2 /path/to/Sick-Beard/SickBeard.py
Type=simple
User=<user under which to run>
Group=<group of said user>
[Install]
WantedBy=multi-user.target
E este é o bifurcado
[Unit]
Description=Binary Newsreader
After=cryptsetup.target
[Service]
ExecStart=/usr/bin/python2 /path/to/sabnzbd/SABnzbd.py -d -f /path/to/inifile --pid /run/sabnzbd
Type=forking
PIDFile=/run/sabnzbd/sabnzbd-8080.pid
User=<user to run the process>
Group=<group of said user>
[Install]
WantedBy=multi-user.target