【问题标题】:Shell script to find out if a port is being listened to using netstat?使用 netstat 查明是否正在监听端口的 Shell 脚本?
【发布时间】:2017-12-12 03:10:09
【问题描述】:

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

我正在考虑编写一个 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 上运行。

【问题讨论】:

  • 我的回答对你有用吗?
  • 嗨,拉兹格里兹。麻烦你回答@James好吗?

标签: linux bash shell sockets


【解决方案1】:

如果您使用netstat -tlpn(或其替代品ss -tpln),您可以使用grep 查找9999 并在“本地地址”下查找正在监听它的进程。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-26
      • 2015-11-29
      • 2014-01-18
      • 2012-02-28
      • 1970-01-01
      • 2013-02-11
      • 2013-05-14
      相关资源
      最近更新 更多