我有一台服务器,其中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端口上运行。
答案 0 :(得分:2)
如果您使用netstat -tlpn
(或其替换ss -tpln
),您可以查找9999
并查找&#34;本地地址&#34; < / p>
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
答案 1 :(得分:1)
您可以使用着名的netstat -tupln
使用简单的if / else逻辑来执行此操作。
if [ -z "$(sudo netstat -tupln | grep 9999)" ];
then
echo notinuse;
else
echo inuse;
fi