process

Start a not running process via cron

Written by  on Februar 24, 2017

Beispielcode zum Starten eines Prozesses, wenn diese nicht mehr Läuft. Direkt zur Verwendung in Cron.

#!/bin/bash

PROG="apache"
ps -ww aux | grep -v grep | grep $PROG >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
  echo "$PROG found"
else
  echo "$PROG not found"
  # hier restart einfügen
fi

Achtung: Das Script einfach parametrisierbar zu machen via $1 statt $PROG funktioniert nicht, da $1 auch wieder von PS gefunden wird. Es wird daher immer der $PROG found Zweig durchlaufen!

grep -v

Written by  on Oktober 29, 2015

Wie sucht man ob ein Prozess läuft?

# ps aux | grep smb
root       699  0.0  0.4  28800  4036 ?        Ss   Oct22   0:43 smbd -F
root       768  0.0  0.1  28800  1604 ?        S    Oct22   0:04 smbd -F
root     21411  0.0  0.0   4680   772 pts/0    S+   18:06   0:00 grep --color=auto smb

Das ist zuviel Output, weil auch der grep-Prozess selber angezeigt wird. Dafür gibt es eine einfältige Lösung:

# ps aux | grep smb | grep -v grep
root       699  0.0  0.4  28800  4036 ?        Ss   Oct22   0:43 smbd -F
root       768  0.0  0.1  28800  1604 ?        S    Oct22   0:05 smbd -F

Aber wie geht es besser?

ps aux | grep [s]mb
root       699  0.0  0.4  28800  4036 ?        Ss   Oct22   0:43 smbd -F
root       768  0.0  0.1  28800  1604 ?        S    Oct22   0:05 smbd -F

Warum funktioniert das? Ganz einfach, weil in der Prozessliste jetzt der String „smb“ nicht mehr vorkommt beim grep-Befehl, sondern der String „[s]mb“. Gesucht wird von dem Befehl aber trotzdem nach „smb“.
Braucht man nur die PID vom Prozess geht es aber einfacher:

# pgrep smb
699
768

Soll das ganze nur zum Beenden der Prozesse genutzt werden, braucht man gar keinen grep mehr.

# killall smbd