Hoi,
leider hat die Suchfunktion nichts gebracht, deshalb poste ich es einfach mal hier.
Es geht um folgendes: Ich habe einen Prozess, der dauerhaft läuft. Es handelt sich um PHP CLI. jetzt habe ich bereits ein Shellscript zum starten und stoppen geschrieben. Es wird beim starten eine Datei angelegt, in der die PID des PHP Skripts steht, was gerade läuft. Jetzt möchte ich per Contab alle paar Minuten prüfen, ob der PHP Prozess noch lebt und ihn ggf. neu starten.
Daher meine Frage: Wie finde ich heraus, ob ein Prozess, deren PID ich kenne, läuft?
Grüße
Christoph
Prüfen, ob Prozess noch läuft
-
- Posts: 22
- Joined: 2003-10-28 14:35
Re: Prüfen, ob Prozess noch läuft
Lösung schon gefunden:
Code: Select all
echo "cheking...";
if [ -e manager.pid ]; then
pid=`cat manager.pid`
var=`ps -p$pid | wc -l`
if [ $var -lt "2" ]; then
./manager.sh start
else
echo "status: running"
fi
else
echo "manager.pid is missing... try starting service... "
./manager.sh start
fi
-
- Posts: 218
- Joined: 2004-09-15 10:14
Re: Prüfen, ob Prozess noch läuft
mhh,
quick and dirty...
du könntest eine
machen und mal schauen ob dir das weiter hilft.
HTH
Jochen
EDIT:
Aber gab es da nicht mal startproc und checkproc für?
Oder ist das wieder so ne SuSE eigenart?
quick and dirty...
du könntest eine
Code: Select all
ps aux | grep $PID
HTH
Jochen
EDIT:
Aber gab es da nicht mal startproc und checkproc für?
Oder ist das wieder so ne SuSE eigenart?
-
- Posts: 48
- Joined: 2005-06-08 02:06
Re: Prüfen, ob Prozess noch läuft
Und das Gegenteil zum Quick and Dirty - der Overkill: monit
http://www.tildeslash.com/monit/doc/screen.php
Kann ich nur weiterempfehlen.
http://www.tildeslash.com/monit/monit is a utility for managing and monitoring, processes, files, directories and devices on a UNIX system. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations.
http://www.tildeslash.com/monit/doc/screen.php
Kann ich nur weiterempfehlen.
-
- Posts: 471
- Joined: 2003-08-21 10:21
- Location: Berlin
Re: Prüfen, ob Prozess noch läuft
Also, die einfachste Möglichkeit zu prüfen ob ein Prozeß noch läuft oder nicht ist durch seinen Elternprozeß gegeben. Der kann nämlich nach dem Starten die PID vom Kind abfragen und er kann sich schlafen legen und auf den Tod eines seiner Kinder warten.Skyrunner wrote:Es geht um folgendes: Ich habe einen Prozess, der dauerhaft läuft. Es handelt sich um PHP CLI.
init macht den ganzen Tag nix anderes.
Die bequemste Methode, einen Prozeß zu starten und bei Tod neu zu starten ist also
Code: Select all
# echo "kk:2345:respawn:/path/to/my/script.php parameter" >> /etc/inittab
# telinit q
Code: Select all
kris@linux:~/Desktop> while :
> do
> sleep 10 &
> child=$!
> echo "Sleep for $child"
> wait $child
> echo "Child $child died - restart"
> done
[1] 17692
Sleep for 17692
[1]+ Done sleep 10
Child 17692 died - restart
[1] 17698
Sleep for 17698
Erst mal kann man die Existenz des PID-File testen.
Code: Select all
if test -e $pidfile
then
echo "PID-File $pidfile existiert."
else
echo "PID-File $pidfile gibt es nicht."
fi
Das bedeutet: Wenn wir ein kill -0 an eine PID senden, die es nicht gibt, bekommen wir ein ESRCH. Wenn wir ein kill -0 an eine PID senden, die es gibt, die wir aber nicht killen dürften, dann bekommen wir ein EPERM. Und wenn es eine PID gibt, und wir die killen dürften, dann bekommen wir ein ok.If sig is 0, then no signal is sent, but error checking is still performed.
In Shell:
Code: Select all
kris@linux:~> kill -0 1
bash: kill: (1) - Operation not permitted
kris@linux:~> echo $?
1
kris@linux:~> kill -0 16161
bash: kill: (16161) - No such process
kris@linux:~> echo $?
1
kris@linux:~> kill -0 $$
kris@linux:~> echo $?
0
LSB sieht nun vor, daß ein Program pidofproc oder checkproc existiert, mit dem man
a) ein PID-File lesen kann
b) testet ob die PID aus dem PID-File noch existiert
c) das angegebene Binary zu /proc/<pid>/exe paßt (Inode-Gleichheit)
Die Manpage zu pidofproc dekliniert das im Detail durch.
Code: Select all
linux:~ # rcmysql start
Starting service MySQL done
linux:~ # pidofproc -p /var/lib/mysql/mysqld.pid -v /usr/sbin/mysqld
linux:~ # echo $?
1
linux:~ # rcmysql stop
Shutting down service MySQL done
linux:~ # pidofproc -p /var/lib/mysql/mysqld.pid -v /usr/sbin/mysqld
linux:~ # echo $?
3
linux:~ # rcmysql start
Starting service MySQL done
linux:~ # kill -9 18299 18334
linux:~ # ls -l /var/lib/mysql/mysqld.pid
-rw-rw---- 1 mysql mysql 6 Oct 5 23:36 /var/lib/mysql/mysqld.pid
linux:~ # pidofproc -p /var/lib/mysql/mysqld.pid -v /usr/sbin/mysqld
linux:~ # echo $?
1
-
- Posts: 471
- Joined: 2003-08-21 10:21
- Location: Berlin
Re: Prüfen, ob Prozess noch läuft
Das ist LSB.snowball wrote:EDIT:
Aber gab es da nicht mal startproc und checkproc für?
Oder ist das wieder so ne SuSE eigenart?