用于查找是否正在使用netstat监听端口的Shell脚本?

时间:2017-12-12 03:10:10

标签: linux bash shell sockets

我有一台服务器,其中PHP套接字服务器正在侦听某个端口(9999)。会发生什么是设备可以连接到套接字并发送消息。代码现在运行正常,但是,我注意到套接字有时会关闭或死掉,我需要能够自动将其重新联机,而无需登录并再次运行。

我想到的是编写一个Shell脚本,通过netstat检查是否有在端口9999上运行的进程,如果没有,则该脚本将触发PHP套接字服务器再次上网。然后,Cron每隔1或2分钟调用一次Shell脚本,以检查PHP套接字是否正在运行。

我对Shell脚本的了解最少,到目前为止,这是我在Shell中写的唯一的其他内容:

#!/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端口上运行。

2 个答案:

答案 0 :(得分:2)

如果您使用netstat -tlpn(或其替换ss -tpln),您可以查找9999并查找&#34;本地地址&#34; < / p>

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

或者,如果可以,请使用netcattelnet代替,例如 nc -v localhost 9999

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

答案 1 :(得分:1)

您可以使用着名的netstat -tupln使用简单的if / else逻辑来执行此操作。

if [ -z "$(sudo netstat -tupln | grep 9999)" ];
then
    echo notinuse;
else
    echo inuse;
fi
相关问题