2017-12-12 9 views
2

おはようございます。私は特定のポート(9999)がPHPソケットサーバーによって聴かれているサーバーを持っています。何が起こるかは、デバイスがソケットに接続してメッセージを送信できることです。今すぐコードはうまく動作しますが、ソケットが閉じたり、消えたりすることに気づいたので、ログインせずに自動的にオンラインに戻して再実行する必要があります。Ubuntu - シェルスクリプトが、netstatを使用してポートを聴いているかどうかを調べるスクリプトですか?

私が考えているのは、ポート9999上で実行されているプロセスが存在するかどうかをnetstat経由でチェックするシェルスクリプトを作成していて、何もない場合、スクリプトはPHPソケットサーバを再びオンラインにします。このシェルスクリプトは、PHPソケットが実行されているかどうかを確認するために1分または2分ごとにCronによって呼び出されます。

私はシェルスクリプトに関する最低限の知識を持ち、これまでのところ、これは私がシェルで書いただけ他の事でした:

#!/bin/sh 

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

私はある程度、このコードを再利用することができるはずだと思うけどif conditionを何に置き換えるべきか分からない。

私は私がプロセスが実行されているかを把握するためにnetstat -tulpnを使用するようになってるのアイデアを持っているが、特定のプロセスがポート9999

上で実行されている場合、私は見つけるためにそのリストをフィルタリングするかどうかはわかりません

netstatを使用して、特定のポートがそれを聞くプロセスを持っているかどうかを調べる方法については、非常に役に立ちます。

+0

私の答えはあなたのために機能しましたか? –

答えて

2

netstat -tlpn(またはその置き換えss -tpln)を使用している場合は、9999をgrepして、「ローカルアドレス」でリッスンするプロセスを探します。

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

また、あなたは、netcatまたはtelnet代わり例えばを使用できるかどうかnc -v localhost 9999

if echo -n "\cD" | telnet ${host} ${port} 2>/dev/null; then 
    ... 
fi 
  • 私はしばらく前に似た何かを書いた:docker-wait
  • をこれは、あなたがこれを行うには、単純なのif/elseロジックで有名なnetstat -tuplnを使用することができますaanand's docker-wait
1

からフォークされました。

if [ -z "$(sudo netstat -tupln | grep 9999)" ]; 
then 
    echo notinuse; 
else 
    echo inuse; 
fi 
関連する問題