/usr/bin/spawn-fcgi überwachen & bei Bedarf restart

Dieses Thema im Forum "Installation und Konfiguration" wurde erstellt von F4RR3LL, 10. Aug. 2012.

  1. F4RR3LL

    F4RR3LL Member

    Guten Morgen, oder ne besser; Guten Tag ;)

    Folgendes, ich monitore so ziemlich alle auf meinem Server laufenden Prozesse (es handelt sich hier um einen nicht Isconfig Server).
    Prozesse die mir abbrechen werden automatisch neu gestartet, alles soweit tutti, jedoch ein Prozess bekomme ich nicht sauber überwacht.
    Code:
    /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
    
    Hat hier jemand einen Codeschnipsel o.ä für die Überprüfung und falls der Prozess nimmer läuft einen Restart mit obigen Angaben.
    Ich habe versucht mir für Monit etwas zu basteln, jedoch bekomme ich damit den Prozess /usr/bin/spawn-fcgi zwar gestartet jedoch ohne die Zusatzoptionen was zwingend ist, da der Prozess ja nur als Beistück zu meinem nginx für php benötigt wird.

    Thx schonmal.

    Gruß aus Bayern,

    Sven
     
  2. F4RR3LL

    F4RR3LL Member

    So ich hab die Lösung falls es wer später mal braucht.
    Ich hab nen minütlichen Crontab angelgt der folgendes Script aufruft.
    Das Script habe ich im Netz gefunden, allerdings umgeschrieben damits auch auf Debian Squeeze passt. Es können noch kleine Fehler drin sein, da ichs erstmal nur fix angepasst hab damit es tut.

    Gruß Sven

    PS: Wer wie bei mir Mails vom Cron eh gesendet bekommt, kann den Mailpart draussen lassen. Sonst kommt alles doppelt und 100 fach ;)

    Code:
    #!/bin/sh
    # (bof)
    
    # Base directory
    cd $(dirname $0)
    base=$(pwd)
    
    # Temp file
    tmp="/tmp/fix.$$"
    
    # Output to file?
    [ -n "$1" ] && exec 1>$tmp 2>&1 3>&1
    
    echo ""
    
    # Settings
    php="/usr/bin/php5-cgi"
    
    # Init
    must_kill=0
    must_start=0
    
    # Running?
    pids=$(ps ax | grep "$php$" | grep -v "grep" | cut -d"?" -f1 | tr -d " ")
    if [ "$pids" != "" ]
    then
    a=$(telnet localhost 9000 | grep "Connected to localhost")
    if [ "$a" = "" ]
    then
    echo "PHP is running but NOT accepting connections!"
    must_kill=1
    must_start=1
    else
    echo "PHP is running and accepting connections!"
    fi
    else
    echo "PHP is stopped!"
    must_start=1
    fi
    
    # Must kill?
    if [ $must_kill = 1 ]
    then
    echo "Stopping PHP..."
    for pid in $pids
    do
    kill $pid >/dev/null 2>&1
    done
    
    # Wait for all pids to disappear
    pids="!"
    while [ -n "$pids" ]
    do
    pids=$(ps ax | grep "$php$" | grep -v "grep" | cut -d"?" -f1 | tr -d " ")
    done
    echo "PHP was stopped"
    fi
    
    # Must start?
    if [ $must_start = 1 ]
    then
    echo "Starting PHP..."
    /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
    echo "PHP was restarted on name_of_your_server" | mail -s "servernachricht" du@domain.tld
    echo "Mail gesendet"
    
    fi
    
    echo "Done!"
    echo ""
    
    # Clean up
    rm -rf $tmp
    
    # (eof)
    
     
    Zuletzt bearbeitet: 10. Aug. 2012
  3. F4RR3LL

    F4RR3LL Member

    Ein letztes noch hier drunter, wer hin und wieder erlebt das der spawn-fcgi Prozess einfach abstürzt, gateway timeouts o.ä. wirft:
    Es hilft folgende Zeile
    Code:
    /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
    
    so zu erweitern
    Code:
    /usr/bin/spawn-fcgi -F 1 -C 1 -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
    
    Kurz zur Erklärung:
    -F und die darauf folgende Zahl bestimmt die Anzahl der Forks.
    -C und die folgende Zahl die Anzahl der Child-Prozesse pro Fork.

    Diese sind natürlich an die Bedürfnisse und Power des Servers anzupassen.

    Warum es so besser funktioniert konnte ich auch nach längerem Suchen noch nicht finden. Jedoch fand ich in den Weiten des Netzes, nachdem ich mich mit stundenlangem debuggen rumgeschlagen hab genau diesen Lösungsansatz mehrfach.

    Gruß Sven
     

Diese Seite empfehlen