pgrep über SSH findet sich selbst
- Matt
Ich wollte auf einem Server warten, bis ein länger laufendes Skript fertig ist, und habe dafür in einer Schleife per SSH nachgesehen:
ssh server 'pgrep -f "nachtlauf.sh"'
Die Schleife lief ewig, auch lange nachdem das Skript fertig war. pgrep -f vergleicht das Muster mit der kompletten Befehlszeile aller Prozesse, und dazu gehört auch die Shell, die SSH auf dem Server für genau diesen Befehl startet. Deren Befehlszeile enthält das Muster natürlich. Sie findet sich also immer selbst. Mit pkill -f ist es noch unangenehmer, das beendet dann die eigene SSH-Sitzung.
Der klassische Kniff ist eine Zeichenklasse im Muster:
ssh server 'pgrep -f "[n]achtlauf.sh"'
Das Muster passt weiterhin auf „nachtlauf.sh“, aber nicht mehr auf die eigene Befehlszeile, denn dort steht „[n]achtlauf.sh“.
Der Haken: Das ist ein Trick, den man in einem halben Jahr nicht mehr versteht. Oft ist es robuster, gar nicht nach Prozessen zu suchen, sondern auf das Ergebnis zu prüfen, also ob die Datei vollständig da ist oder ein Port antwortet. Die Optionen stehen in der Manpage von pgrep. Wie ich Server per SSH-Konfiguration kurz anspreche, steht hier.