PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Systemd startet Skript ständig neu



Noether
19.08.15, 21:38
Ich möchte das ein Skript beim Booten gestartet wird und ständig läuft, also neu gestartet wird wenn es terminiert und dazu habe ich dieses Beispiel als Anfang gemacht:



#!/bin/bash
# file /root/bin/foo.sh

LOGFILE="/root/tmp/foo0.txt"

PIDFILE=/run/foo.pid

echo $$ > $PIDFILE
#echo $BASHPID > $PIDFILE

echo number of arguments: $# >> $LOGFILE

for var in "$@"
do
echo "$var" >> $LOGFILE
done

while true
do
date >> $LOGFILE
sleep 12
done

exit 0





# file /etc/systemd/system/foo.service, use "systemd-analyze verify foo.service" to verify, enable via "systemctl enable foo.service"
[Unit]
Description=Logger Service
# start after syslog
After=syslog.target

[Service]
ExecStart=/bin/bash /root/bin/foo.sh
Type=forking
# at termination: Send sigterm to the process and childs
KillMode=mixed
# respawn
Restart=always
PIDFile=/run/foo.pid
User=root
Group=root
RemainAfterExit=yes
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=2

[Install]
# start on runlevel [2345]
WantedBy=multi-user.target



Aber das funktioniert nicht ganz:



> systemctl start foo.service
Job for foo.service failed because a timeout was exceeded. See "systemctl status foo.service" and "journalctl -xe" for details.



Und das Skript wird alle zwei Sekunden terminiert und neu gestartet, wie die Log-Datei zeigt:



number of arguments: 0
Mi 19. Aug 20:30:29 UTC 2015
number of arguments: 0
Mi 19. Aug 20:30:32 UTC 2015
number of arguments: 0
Mi 19. Aug 20:30:34 UTC 2015
number of arguments: 0
Mi 19. Aug 20:30:37 UTC 2015


Wieso killt systemd das Skript? :confused:

Von allein terminiert das Skript nicht; es bleibt in der while-Schleife und schreibt alle 12 Sekunden die Zeit in die Logdatei.

Noether
20.08.15, 09:24
Ich habe es hinbekommen, nach der Dokumentation zu Systemd:



# file /etc/systemd/system/foo.service, use "systemd-analyze verify foo.service" to verify, enable via "systemctl enable foo.service"
[Unit]
Description=Logger Service
# start after syslog
After=syslog.target

[Service]
ExecStart=/bin/bash /root/bin/foo.sh
# no forking, no oneshot, no signal to systemd, ...
Type=simple
# at termination: Send sigterm to the process and childs
KillMode=mixed
# respawn
Restart=always
PIDFile=/run/foo.pid
User=root
Group=root
# the service is NOT active when exited
RemainAfterExit=no

[Install]
# start on runlevel [2345]
WantedBy=multi-user.target

Noether
20.08.15, 09:25
Ich habe es hinbekommen, nach der Dokumentation zu Systemd:



# file /etc/systemd/system/foo.service, use "systemd-analyze verify foo.service" to verify, enable via "systemctl enable foo.service"
[Unit]
Description=Logger Service
# start after syslog
After=syslog.target

[Service]
ExecStart=/bin/bash /root/bin/foo.sh
# no forking, no oneshot, no signal to systemd, ...
Type=simple
# at termination: Send sigterm to the process and childs
KillMode=mixed
# respawn
Restart=always
PIDFile=/run/foo.pid
User=root
Group=root
# the service is NOT active when exited
RemainAfterExit=no

[Install]
# start on runlevel [2345]
WantedBy=multi-user.target