Hallo Lug!
Ich habe zwei Shell-Scripte in PHP, die permanent laufen und wenige Ausgaben haben.
Nun sollen die Scripte im Hintergrund rennen. Deshalb brauche ich ein Start-Script im gleichen Verzeichnis. Es soll die beiden PHP-Scripte starten und ihre Ausgaben sowie Fehlermeldungen in eine Log-Datei schieben.
Das Script muss auch erklären können, ob beide Scripte laufen und sie auf Wunsch abschießen. Eine Restart-Funktion wäre das Sahnehäubchen.
Ach ja: Der Daemon läuft nicht als root. Auf /var/run habe ich keinen Zugriff. Deshalb wollte ich mit Lockfiles eigentlich nicht arbeiten, sondern den Status über die Anwesenheit des Tasks abfragen. Ansonsten brauche ich in etwa so etwas: http://www.stefan-kehrer.de/index.php?id=57
Wie muss ich die Scripte starten, so dass sie im richtigen Verzeichnis gefunden werden und alle Ausgaben in die gemeinsame Datei wandern? Und wie stelle ich ohne Lockdatei fest, ob die Scripte laufen?
Thomas
Hallo,
Thomas Schmidt schmidt@netaction.de (Mo 05 Dez 2011 10:11:57 CET): (…)
Das Script muss auch erklären können, ob beide Scripte laufen und sie auf Wunsch abschießen. Eine Restart-Funktion wäre das Sahnehäubchen.
case "$1" in start) …;; stop) …;; restart) $0 stop $0 start ;; esac
Ach ja: Der Daemon läuft nicht als root. Auf /var/run habe ich keinen Zugriff. Deshalb wollte ich mit Lockfiles eigentlich nicht arbeiten,
Warum, die könnten ja auch woanders liegen.
Wie muss ich die Scripte starten, so dass sie im richtigen Verzeichnis
Die Frage verstehe ich nicht.
gefunden werden und alle Ausgaben in die gemeinsame Datei wandern? Und
#! /bin/bash … script1 &>output script2 &>output
wie stelle ich ohne Lockdatei fest, ob die Scripte laufen?
Annäherungsweise könntest Du in der Prozesstabelle gucken, ob die Scripte zu finden sind.
Vielen Dank Heiko!
Ich habe folgendes Script geschrieben. Es funktioniert anscheinend ganz gut. Habe ich als Bash-Noob etwas Unsinniges gemacht?
Thomas
######################################### #!/sbin/sh
# Start & Stop Script # Thomas Schmidt 2011
DIR=`dirname $0`
case "$1" in start) echo Starting daemon... pgrep -f script1 > /dev/null && echo script1 already running. pgrep -f script1 > /dev/null || ./${DIR}/script1 >> ${DIR}/logfile 2>&1 & pgrep -f script2 > /dev/null && echo script2 already running. pgrep -f script2 > /dev/null || ./${DIR}/script2 >> ${DIR}/logfile 2>&1 & ;; stop) echo Shutting down daemon... pgrep -f script1 > /dev/null || echo script1 is NOT running. pgrep -f script1 > /dev/null && echo "stop script1...\c" while ( pgrep -f script1 > /dev/null ) do pkill -9 -f script1 echo ".\c" sleep 1 done && echo pgrep -f script2 > /dev/null || echo script2 is NOT running. pgrep -f script2 > /dev/null && echo "stop script2...\c" while ( pgrep -f script2 > /dev/null ) do pkill -9 -f script2 echo ".\c" sleep 1 done && echo ;; restart) # echo Restarting daemon... $0 stop sleep 1 $0 start ;; status) pgrep -f script1 > /dev/null || echo script1 is NOT running. pgrep -f script1 > /dev/null && echo script1 is running. pgrep -f script2 > /dev/null || echo script2 is NOT running. pgrep -f script2 > /dev/null && echo script2 is running. ;; *) echo "Usage: $0 { start | stop | restart | status }" exit 1 ;; esac
exit 0
Thomas Schmidt schmidt@netaction.de (Do 08 Dez 2011 13:33:50 CET):
Vielen Dank Heiko!
Ich habe folgendes Script geschrieben. Es funktioniert anscheinend ganz gut. Habe ich als Bash-Noob etwas Unsinniges gemacht?
Thomas
######################################### #!/sbin/sh
/bin/sh oder falls Du „Bashismen“ verwendest, auch /bin/bash
# Start & Stop Script # Thomas Schmidt 2011
DIR=`dirname $0`
case "$1" in start) echo Starting daemon... pgrep -f script1 > /dev/null && echo script1 already running. pgrep -f script1 > /dev/null || ./${DIR}/script1 >> ${DIR}/logfile 2>&1 &
Die zwei Zeilen oben könnte man auch so schreiben:
if pgrep -f script1 >/dev/null then echo script1 already running else $DIR/script1 >> $DIR/logfile 2>&1 & fi
Bei den anderen dann analog.
pgrep -f script2 > /dev/null && echo script2 already running. pgrep -f script2 > /dev/null || ./${DIR}/script2 >> ${DIR}/logfile 2>&1 & ;; stop) echo Shutting down daemon... pgrep -f script1 > /dev/null || echo script1 is NOT running. pgrep -f script1 > /dev/null && echo "stop script1...\c"
while ( pgrep -f script1 > /dev/null )
Wozu hier die Klammer?
do pkill -9 -f script1 echo ".\c" sleep 1 done && echo
Warum das &&?
lug-dd@mailman.schlittermann.de