Seit einigen Wochen nutzen wir u.a. fuer Swopspot den github-clone gitlab. Soweit - Sogut. Alles schoen. Doof nur, das der verwendete resque server abundan aussteigt und dann werden die Aenderungen der git-repositories nicht an gitlab weitergereicht. Also bekomm ich dann (nach dem die Notifications zwei Tage haengen) eMails mit der Bitte mal zu gucken... Das spiel habe ich dann jetzt drei mal gespielt und keine Lust mehr gehabt... Nachdem man einmal weis woran es liegt kann man das bequem die Maschine uebernehmen lassen...
Also dachte mir ich, k bauste fix nen shell script, was guckt ob sich irgendwo noch resque Prozesse finden, und wenn nicht, dann starte ihn halt wieder...
Dann sah die erste Version so aus:
#!/bin/bash FINDRESQUEPROCESS=$(echo `ps -ef | grep resque | grep -vc grep`) # den grep Prozess wollen wir natuerlich nicht mitzaehlen ;) # -v invertiert die Suche und -c zaehlt die Ergebnisse if [ $FINDRESQUEPROCESS != "0" ]; then echo "resque is running." echo "nothing to do here." exit 0 else echo "resque is not running!" echo "starting resque for you..." sudo su - gitlab bash -c "cd gitlab && ./resque.sh && exit" exit 0 fi exit 1
# ./check-resque.sh
4
4? Sollte dort nicht 1 stehen? Mhm...
Also lassen wir uns testweise mal ausgeben was gefunden wird.
# ./check-resque.sh gitlab 11727 1 0 01:04 ? 00:00:05 resque-1.20.0: Waiting for post_receive,mailer,system_hook root 23013 5903 0 13:51 pts/9 00:00:00 /bin/bash ./check-resque.sh root 23014 23013 0 13:51 pts/9 00:00:00 /bin/bash ./check-resque.sh root 23015 23014 0 13:51 pts/9 00:00:00 /bin/bash ./check-resque.sh
Gut, das erklaert die Sache, das Script enthaelt natuerlich auch resque im Namen und wird somit gefunden. Also muessen wir das Script selbst auch aus dem Ergebniss nehmen.
#!/bin/bash THISSCRIPT=`basename $0` FINDRESQUEPROCESS=$(echo `ps -ef | grep resque | grep -v $THISSCRIPT | grep -vc grep`) if [ $FINDRESQUEPROCESS != "0" ]; then echo "resque is running." echo "nothing to do here." exit 0 else echo "resque is not running!" echo "starting resque for you..." sudo su - gitlab bash -c "cd gitlab && ./resque.sh && exit" exit 0 fi exit 1
Cron fuehrt das Script jetzt einfach alle 30 Minuten aus und Ruhe is' (hoffentlich).
es tut mir leid, das ich euch in der Luft zerreissen muss:
pidof resque >/dev/null || {
restart_resque
}
das kann dann auch leicht ein cron.minutely sein....
Geht auch mit einem eigens dafür geschriebenen framework namens GOD, welches auch in Ruby geschrieben ist und ziemlich schlaue Sachen kann.
@basti: mhm k. muss man wissen.
:-)
mitlerweile is es aber eh obsolete :/ gitlab verwendet nun sidekiq