【问题标题】:Linux Command and Automated ActionLinux 命令和自动操作
【发布时间】:2017-11-27 15:58:42
【问题描述】:

我的服务器有时会停止工作,我找到的唯一解决方案是创建一个执行此命令的 cron:

netstat -tn | grep -c :80

以下命令将输出到端口 80 的连接数。 问题是我希望如果输出为 0,那么服务器需要重新启动。

【问题讨论】:

  • 如果网络服务关闭,您实际上是在要求重新启动服务器?
  • 是的,你是对的@reichhart
  • 这是 unix 国家。在这个国家,您只为新内核重新启动服务器。 ;-) 你应该修复网络服务!如果 Web 服务已关闭:重新启动它。不要使用 cron。
  • @reichhart 这不是关于 Web 服务器,端口 80 是关于传出连接 :)
  • 您的 grep 将匹配 INCOMING 和 OUTGOING 端口 80 tcp 流量!您的描述说“服务器停止工作”,这意味着传入端口 80 tcp 流量。

标签: linux grep cron command netstat


【解决方案1】:

已解决, 通过一些搜索,我写了这个:

#!/bin/bash
while true
do
OUTPUT=`netstat -tn | grep -c :80`
if [ "$OUTPUT" == '0' ]; then
echo 'No connections, rebooting :)'
else
echo "$OUTPUT"
fi
sleep 1
done 

【讨论】:

  • 如果在过去 2 分钟内没有传入和传出 TCP 端口 80 连接,您正在重新启动主机?你确定你在做正确的事吗?带有 while 循环和“sleep 1”的 bash 脚本表明,关于 unix,你还有很多东西要学习。
  • 实际上您正在搜索的命令是“ netstat -nt|awk '{print$4}'|grep -c ':80$' ”(检查本地端口)。但是你想想为什么没有人回答你的问题(除了你自己)以及我为什么要问这些问题。你走错路了。不要使用此命令,不要使用 cronjob 来解决您的问题,也不要使用无休止运行的脚本。思考真正的问题,提出匹配的问题,然后你会在这里得到完美的答案。
  • @reichhart 对。你确定那个命令吗?当我刚刚尝试 netsat -nt 时,第 4 个字段是状态,因此通过管道 grep 获取端口号将永远找不到它。我认为您的意思可能是 netstat -nt | awk '$3~/:80$/{c++} END{print c+0}'(当然不需要 grep),但我不使用 netsat,所以我只是猜测正确的字段编号。
  • 1.) 我刚刚修复了 ewwew 命令中的错误。像您的解决方案一样使用 2 个而不是 3 个命令就可以了。 2.) 在我的 Linux 系统上,4 是本地地址,状态是 6。
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 2019-08-25
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
相关资源
最近更新 更多