2017-12-12 7 views
2

Guten Tag alle. Ich habe einen Server, auf dem ein bestimmter Port (9999) von einem php-Socket-Server gehört wird. Was passiert ist, dass Geräte eine Verbindung zum Socket herstellen und Nachrichten senden können. Der Code funktioniert im Moment gut, aber ich habe bemerkt, dass der Socket manchmal geschlossen oder abgestorben ist, und ich muss in der Lage sein, ihn automatisch online zu stellen, ohne dass ich mich einloggen und neu starten muss.Ubuntu - Shell Script um herauszufinden, ob ein Port mit netstat gehört wird?

Ich denke an das Schreiben eines Shell-Skripts, das über Netstat überprüfen würde, ob ein Prozess auf Port 9999 läuft, und wenn es keine gibt, würde das Script den php-Socket-Server veranlassen, wieder online zu gehen. Dieses Shell Script würde dann von Cron alle 1 oder 2 Minuten aufgerufen, um zu prüfen, ob der PHP Socket läuft.

Ich habe Nötigste Wissen über Shell Scripting, und so weit, dies war die einzige andere Sache, die ich in Shell schrieb:

#!/bin/sh 

if pidof "my process name here" >/dev/null; then 
    echo "Process already running" 
else 
     echo "Process NOT running!" 
     sh /fasterthancron.sh 
fi 

Ich glaube, ich soll diesen Code zu einem gewissen Grad wieder verwenden kann, aber ich bin mir nicht sicher, was ich mit if condition ersetzen soll.

Ich habe die Idee, dass ich angeblich netstat -tulpn verwenden, um herauszufinden, welche Prozesse ausgeführt werden, aber ich bin nicht sicher, wie durch diese Liste filtern zu finden, wenn ein bestimmte Prozess auf Port läuft 9999.

Jede Hilfe, wie man netstat benutzt, um herauszufinden, ob ein bestimmter Port einen Prozess hört, wird sehr hilfreich sein.

+0

hat meine Antwort für Sie funktioniert? –

Antwort

2

Wenn Sie netstat -tlpn (oder seinen Ersatz ss -tpln) verwenden, können Sie für 9999 grep suchen und nach Prozessen suchen, die es unter "Lokale Adresse" überwachen.

ss -tpln | awk '{ print $4 }' | grep ':9999' 

Alternativ, wenn Sie können, verwenden netcat oder telnet statt z.B.nc -v localhost 9999.

if echo -n "\cD" | telnet ${host} ${port} 2>/dev/null; then 
    ... 
fi 
1

Sie berühmte netstat -tupln mit einem einfachen verwenden können, wenn/else-Logik, dies zu tun gegabelt wurde.

if [ -z "$(sudo netstat -tupln | grep 9999)" ]; 
then 
    echo notinuse; 
else 
    echo inuse; 
fi 
Verwandte Themen