grep voodooo

November 26th, 2012 § 3 comments § permalink

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).