init.d start prozess prüfen ob läuft

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

init.d start prozess prüfen ob läuft

Beitrag von ren22 » 29.07.2014 13:10:47

Hi

ich suche eine Möglichkeit mit einem init Script , welches unter "/etc/init.d/" liegt, das beim Systemstart ausgeführt wird und am besten im Hintergrund weiterläuft, automatisch prüft ob der Prozess, der von diesem init Script gestartet wurde, noch läuft, wenn nicht, sollte dieses init Script den Prozess neustarten.

Jemand eine Idee wie man das scripten könnte ?

vielen Dank
ren22

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: init.d start prozess prüfen ob läuft

Beitrag von smutbert » 29.07.2014 14:24:07

viele Skripte legen zB eine Datei an, deren einziger Inhalt die PID ist (zB in /var/run). Dann kann man leicht prüfen ob dieser Prozeß noch läuft.
Die PID eines im Hintergrund gestarteten Programms wird in der Variablen $! gespeichert.

ren22

Re: init.d start prozess prüfen ob läuft

Beitrag von ren22 » 30.07.2014 13:15:01

hat jemand ein Beispiel parat ?

vielen Dank
ren22

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: init.d start prozess prüfen ob läuft

Beitrag von smutbert » 30.07.2014 14:51:17

In Debian macht das zB auf Wunsch start-stop-daemon. Als Beispiel die Zeilen zum starten und stoppen aus dem init-Skript von ssh:

Code: Alles auswählen

start-stop-daemon --start --quiet --oknodo --pidfile /var/run/sshd.pid --exec /usr/sbin/sshd -- $SSHD_OPTS

start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/sshd.pid
(die manpage von start-stop-daemon ist sehr gut gemacht :wink:)



oder ohne start-stop-daemon einfach in der Art:

starten des Programms…

Code: Alles auswählen

/usr/local/bin/meinProgramm &
echo $! > /var/run/meinProgramm.pid
überprüfen und gegebenenfalls neu starten…

Code: Alles auswählen

if ps --pid $(cat /var/run/meinProgramm.pid) > /dev/null
    then
        echo Programm läuft
    else
        echo Programm läuft nicht
        /usr/local/bin/meinProgramm &
        echo $! > /var/run/meinProgramm.pid
fi
das könntest du dann in einer Schleife oder als cron-Job alle paar Minuten ausführen

Antworten