Programm nur starten, wenn es noch nicht läuft

Post Reply
Message
Author
User avatar
eman
Posts: 33
Joined: 26. Sep 2001 21:27
Contact:

Programm nur starten, wenn es noch nicht läuft

#1 Post by eman »

Hallo Gemeinde,

ich suche eine Kommando-Verknüpfung in der Art

Code: Select all

ps ax | grep "my_prog" && my_prog
um ein Programm nur dann zu starten, wenn es noch nicht läuft. Vielleicht gibt es sogar eine Lösung zu

Code: Select all

Läuft Programm DANN aktion_1 SONST aktion_2
?

Vielen Dank für eure Hilfe
Erik

User avatar
max
Posts: 806
Joined: 14. May 2000 12:55
Location: Ruhrpott

#2 Post by max »

funktioniert deine Version nicht?


Aber gucke dir mal die Start/Stop-Scripte in init.d an.
Dort wird das immer so gemacht. Bei debian gibt es einen start-stop-daemon Skript.


Der legt die PID in /var/run ab.
Daszu gibt es bestimmt auch ne Doku....

kanonenfutter

#3 Post by kanonenfutter »

am bsp von "kate":

Code: Select all

$(ps ax | grep -w kate | grep -vq "grep") && echo "läuft bereits" || kate &
wenn es noch nicht läuft wird es gestartet.

kanonenfutter

#4 Post by kanonenfutter »

PS: es steht dir natürlich frei, ein skript zu basteln, das du dann auch in anderen skripten benutzen kannst. dabei muss man dann aber zusätzlich den aufruf des skripts aus dem ps-output rausfiltern.

Code: Select all

#!/bin/bash
# /usr/local/bin/isrunning. aufruf: isrunning PROCESSNAME
# RC: 0 falls >0 prozesse dieses namens laufen, 1 sonst

myname=$(basename $0)
exit $(ps ax | grep -w $1 | grep -vw $myname | grep -vq "grep")
ein kleiner haken bei der skript-lösung:
angenommen, du editierst in vi ausgerechnet das skipt selber und es läuft keine weitere instanz von vi. nun testest du mit dem skript, ob vi läuft, aber die entsprechende zeile wird ausgefiltert (wegen skriptname) --> vi scheint nicht zu laufen. ...da müsste man noch ein bisschen tunen.

kanonenfutter

#5 Post by kanonenfutter »

nachtrag und tuning:
mit dem parameter "c" gibt ps nur die prozessnamen ohne aufrufparameter aus. das löst das problem mit dem skriptnamen und vereinfacht den code erheblich.

Code: Select all

exit $(ps axc | grep -wq $1)

User avatar
eman
Posts: 33
Joined: 26. Sep 2001 21:27
Contact:

Vielen Dank

#6 Post by eman »

für die konstruktiven Vorschläge. Funktioniert genau so, wie ich es wollte.

Grüße
Erik

Post Reply