2013-10-16 shell脚本练习题

回复 收藏
写一个脚本,判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己。脚本写好后,可以每一分钟执行一次,也可以写一个死循环的脚本,30s检测一次。

{{{密码回复可见}}}
2013-10-16 15:12 举报
已邀请:
0

skylake_

赞同来自:

贪婪匹配过滤端口正确吗?
0

Linuxpp

赞同来自:

不断学习
0

Linuxpp

赞同来自:

/dev/null 2> /dev/null这里怎么解释?
0

t0ny1988

赞同来自:

#!/bin/bash
while :
do
port=`netstat -lnp |grep :80`
if [ -z "$port" ]
then
  echo "http down" | mail -s "httpd problem" test@11.com
  /usr/local/apache2/bin/apachectl restart
  sleep 30
else
  exit 0
fi
done
0

lin19890913

赞同来自:

看看
0

大漠之烟

赞同来自:

{:4_91:}
0

lyhabc

赞同来自:

vi test.sh
#!/bin/bash
while :
do
n=`netstat -lnp|grep 80|wc -l`
if [ n -gt 0 ]
then
continue
else
        service httpd restart
        echo 'restat httpd' |mail -s 'xx' xx@163.com
fi
sleep 30s
done

echo "test.sh" >> /var/spool/cron/root
0

lyhabc

赞同来自:

#! /bin/bash
if netstat -lnp |grep -Eq ':80'     #一定要精确匹配否则误判 -q 安静
then
        exit    #有返回值为真0
else
        service httpd restart  >/dev/null 2>&1
        echo '80 port is down.' |mail -s 'check_80' xx@163.com
         n=`ps aux |grep httpd|grep -cv grep`
    if [ $n -eq 0 ]; then
        /usr/local/apache2/bin/apachectl start 2>/tmp/apache_start.err
    fi
    if [ -s /tmp/apache_start.err ]; then
        cat /tmp/apache_start.err |mail -s 'apache_start_error' $mail
    fi
fi
0

zkq_315

赞同来自:

学习!
0

KICAZ629

赞同来自:

学习学习
0

jokerhuman

赞同来自:

学习
0

落涧飞鹰

赞同来自:

看看
0

thedawn

赞同来自:

1
0

wangzai

赞同来自:

学习
0

北辰星

赞同来自:

#!/bin/bash
while [ 1 ]
do
    n=$[`netstat -lnp |grep ':80' |wc -l`]
    if [ $n == 1 ]
    then
          echo "the httpd service is OK"
    else
          /etc/init.d/httpd start
          echo "the httpd service is down" |mail -s 15779025129@163.com
    fi
    sleep 30
done
0

riluozhiyue

赞同来自:

学习
0

bbcw

赞同来自:

看看,这个真一点思路都没,想了3个小时了
0

zmh0415

赞同来自:

学习
0

lin13750529011

赞同来自:

谢谢
0

gxp2008

赞同来自:

本帖最后由 gxp2008 于 2016-3-2 17:25 编辑
  1. a=`netstat -lnp |grep 80 |awk '{print $4}' |sed 's/\::://'`
  2. if [ -z $a ]
  3.     then
  4.          service httpd start
  5.           echo "http is down" | mail -s httpd is down lz_gxp@126.com
  6.     else
  7.          echo "It's OK"
  8. fi
0

we14578

赞同来自:


#!/bin/bash

a=`netstat -lnp |awk -F ' ' '{print $4}'|grep 80 |wc -l`
if [ $a == 0 ]
then
echo "httpd is down "
/bin/mail -s  xx@xx.com
service httpd start
else
echo "httpd is on"
fi
0

jinm

赞同来自:

学习
0

乐橙306

赞同来自:

1
0

zyos

赞同来自:

#!/bin/bash
a=`netstat -lnpt |grep 80 |awk -F / '{print $2}'`

if [ -z $a ] ;then
service nginx start
echo "httpd restart" |mail -s "waring!! httpd " zyos@qq.com
else
echo ok > /dev/null
fi

0

不怕不怕

赞同来自:

看看
0

xlycamel

赞同来自:

脚本
0

xlycamel

赞同来自:

脚本
0

xlycamel

赞同来自:

脚本
0

xlycamel

赞同来自:

脚本
0

xlycamel

赞同来自:

脚本
0

xlycamel

赞同来自:

脚本
0

王sir

赞同来自:

本帖最后由 王sir 于 2016-3-11 16:47 编辑

#!/bin/bash port=`netstat -lnp | grep 3306 |wc -l`
if [ $port  -lt 1 ] ; then   
/etc/init.d/mysqld restart | mail -s "mysql is err" xxx@qq.com
fi
我是拿mysql测试的,测试成功,计划任务  1 * * * *   mysql.sh
0

小猫咪

赞同来自:

{:5_122:}
0

cxiaodian

赞同来自:

good
0

andyaaa

赞同来自:

{:4_91:}
0

郭贞

赞同来自:

{:4_92:}
0

yuan2015

赞同来自:

瞅一瞅
0

阿杰

赞同来自:

123
0

jxcia2018

赞同来自:


#!/bin/bash
while :;do
a=`netstat -lnp|grep :80|awk '{print $4}'|awk -F ':' '{print $2}'`
if [ -z  $a ]
then
service httpd restart
mail -s "service nginx restart" jason@qq.com
fi
sleep 30
done
0

贾刚

赞同来自:

asfsdafasdf
0

王思彦

赞同来自:

{:4_91:}
0

wsw13640218682

赞同来自:

  1. [root@cacti-client ~]# cat checkservice.sh
  2. #!/bin/bash
  3. http=`netstat -lnp |grep 80`
  4. while :;
  5. do
  6. if [ -z $http ]
  7. then
  8. echo "httpd is down" | service httpd restart | mail -s "oo"  280472479@qq.com
  9. else
  10. echo "httpd is ok"
  11. fi
  12. sleep 30
  13. done
  14. /code]

  15. <div class="blockcode"><blockquote>crontabe -e:
  16. */1 * * * * /bin/bash  /root/checkservice.sh


0

huanglin

赞同来自:

简单的还写的出来 但这。。。我只能偷偷看看答案了{:4_92:}
0

阿凯

赞同来自:

本帖最后由 阿凯 于 2016-4-27 22:09 编辑

我想的太简单了
0

qq895933723

赞同来自:

kankan
0

echo

赞同来自:

不会写  学许一下
0

小璇Linux

赞同来自:

学习
0

漠林sky

赞同来自:

学习
0

xufanyunwei

赞同来自:

学习
0

等风来

赞同来自:

学习
0

branttsai

赞同来自:

study,tks
0

alvinnull

赞同来自:

学习
0

先生好

赞同来自:

参考参考
0

linuxcp

赞同来自:

ok
0

linuxcp

赞同来自:

ok
0

stone

赞同来自:

本帖最后由 stone 于 2016-5-27 08:41 编辑

if netstat -lnp|awk '{print $4}'|grep -q ':333$'; then exit; else serive httpd start;echo "邮件内容" |mail -s "主题" abc@139.com; sleep 30; fi
0

luckytodd

赞同来自:

本帖最后由 luckytodd 于 2016-5-27 10:09 编辑

#!/bin/bash
#Written by dwt at 2016-05-27
#判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己。脚本写好后,可以每一分钟执行一次,也可以写一个死循环的脚本,30s检测一次。
port=`netstat -lnp|grep 25|awk  '{print $4}'|awk -F ':' '{print $2}'|grep -v '^$'`
while :
do
if [ -z $port ]
then
  echo "Httpd is already started"
else
echo "The 80 Port is stop "
mail -s "Httpd is stopped" abc@126.com
/etc/init.d/start
fi
sleep 30done
0

xpgong

赞同来自:

kankan1
0

十月鱼

赞同来自:

学习
0

elvis

赞同来自:

学习了
0

greenfish

赞同来自:

学习
0

luckytodd

赞同来自:

#!/bin/bash
ip=`ifconfig |head -2|tail -1|awk '{print $2}'|awk -F ':' '{print $2}'`
while ! netstat -lnp|grep 80
do
/etc/init.d/httpd restart
echo "Http of $ip is down" |mail -s "Warnging" abc@139.com
sleep 30
done
0

hegeng

赞同来自:

学习
0

Toornix

赞同来自:

[root@localhost shell]# vim 80.sh

#!/bin/bash

while :
do
        if [ -z $(netstat -pantu|grep 80) ]
        then
                /etc/init.d/httpd start
        fi
        sleep 30
done
0

李磊

赞同来自:

学习
0

jonnylin

赞同来自:

学习
0

Coohx - 小运维

赞同来自:

练习一下
0

lanceli

赞同来自:

kankan
0

kevinjin

赞同来自:

#!/bin/bash
while [ -z `netstat -lnp |grep '0.0.0.0:80'` ]
do
    /etc/init.d/nginx restart
    mail -s 'nginx restart' 123@qq.com 'nginx restart'
    sleep 60
done
0

wy1112980

赞同来自:

#!/bin/bash
##
##

a=":::80"
b=`netstat -lnp|grep httpd |awk -F' ' '{print $4}'`

while :;do
  b=`netstat -lnp|grep httpd |awk -F' ' '{print $4}'`

  if [ $b == $a ];
  then
    echo "The httpd service is ok!"
  else
    service httpd restart
    echo "The httpd service is down!" |mail -s "主题" spacehuman@163.com
    echo "The httpd service was started!"
  fi

  sleep 30
done
0

hemengxi

赞同来自:

{:4_105:}
0

jayden-zeng

赞同来自:

echo ""
netstat -ntulp |grep 80
a=$?
if [ ! $a -eq 0 ];then
        service httpd start
        echo "httpd service error, restart"
fi
0

a_leon

赞同来自:

while :;do
        if netstat -lnpt |grep 80;then
                sleep 1
        else
                /etc/init.d/httpd restart
        fi
        sleep 30
done
0

riverxyz

赞同来自:

#!/bin/bash
port=`netstat -lnp|grep ":80"|wc|awk -F " " '{print $1}'`
while :; do
  if [ $port -ge 1 ]
  then  exit
  else /etc/init.d/httpd restart
  echo echo "the 80 port has been down now restart it!"|mail -s "restart the 80 port" chenconghe@benco.com.cn
  fi
sleep 30
done
~
0

13805775620

赞同来自:

看看

0

标哥

赞同来自:

本帖最后由 标哥 于 2016-8-28 22:26 编辑

#! /bin/bash
#
port=/tmp/port
[ -d /tmp/port ] || mkdir /tmp/port
while :
do
  netstat -lnp|awk '{print $4}'|awk -F':' '{print $NF}' | grep  -v  '^$' |grep '^[0-9]' > /tmp/port/port.txt
  if  grep -q '80'  /tmp/port/port.txt
  then
      echo "ok, httpd 服务已经开启。"
  else
      echo "httpd 服务没有开启,现在开启服务。"
      /etc/init.d/httpd start
      echo "now start httpd"| mail -s "notice"  15769162764@163.com
  fi
  sleep 30
done


#我的思路,首先,通过找到 端口号,把端口号,放到port.txt 中,之后 用grep -q 去判

断 有没有80 端口 ,如果有的话,输出服务开启,如果没有,就发邮件,重启服务。##



0

xgmxm

赞同来自:

#!/bin/bash
##
##
while :
do
if netstat -lnp | grep 80| grep -q httpd
then
        echo "httpd is start"
else
        if netstat -lnp | grep 80 | grep -q nginx
        then
                /etc/init.d/nginx stop > /dev/null
        fi
                /etc/init.d/httpd start
                echo "httpd start...."
fi
sleep 30
done
0

13600827194

赞同来自:

学习

0

凌乱

赞同来自:

!/bin/bash

判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务

,并发邮件通知你自己。脚本写好后,可以每一分钟执行一次,也可以写一个死循环的脚本,30s检测一>

次。#每分钟执行一次就去使用crond服务:crontab -e 定义     * 命令行

这里写一个死循环,30分钟检测一次,为了测试加两条报信的,来个反应

while :;do

netstat -lnp |grep :80 > /dev/null

    if [ $? -eq 0 ];then

        echo "80 is up"

    else

        echo "80 is down"

        /etc/init.d/httpd restart > /dev/null

    fi

    sleep 30

done

忘记发一下邮件了

0

EvilAnne - m

赞同来自:

#!/bin/bash

#写一个脚本,判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己。脚本写好后,可>以每一分钟执行一次,也可以写一个死循环的脚本,30s检测一次。

mail=123@qq.com

while :;do

  apacheport=`netstat -tnl|grep 80|awk '{print $4}'|cut -c 4-`

  if [ $apacheport == "0" ];then

    apachestart=`service httpd restart`

    echo "start...king $apachestart"|mail -s "message" $mail

fi

  sleep 60

done

0

有人喜欢蓝

赞同来自:

hhhhhhhhhhhhhhhhhhhhhhhhhh

0

。。。

赞同来自:

看下

0

kw是id

赞同来自:

#!/bin/bash
a=`netstat -lnp |grep '80'|grep -v ':::80' |awk '{print $1}'`
b=`rpm -qa |grep 'sendmail'`
if [ -z "$b" ]
then
   yum install -y sendmail
   service sendmail start
else
   service sendmail restart
fi
while :
do
   if netstat -lnp |grep ':80' |grep -q 'LISTEN'
   then
      echo "the 80 port is alive" >/dev/null
   else
      /usr/local/apache4/bin/apachectl restart >/dev/null 2>&1
      echo "the 80 port is down," |/usr/sbin/sendmail -s "please check_80" 327357283@qq.com
      n=`ps aux |grep httpd|grep -cv grep`
      if [ $n -eq 0 ]
      then
         /usr/local/apache4/bin/apachectl start 2>> /usr/local/apache4/logs/error_log
         echo `tail /usr/local/apache4/logs/error_log`|/usr/sbin/sendmail -s "please check error_log" 327357283@qq.com 
      fi
   fi
   sleep 60
done

看了老师的答案才知道怎么写,把脚本放到后台执行就可以了 nohup &

0

重庆-刘鹏

赞同来自:

学习

0

西瓜糖

赞同来自:

#!/bin/bash
#Description: This script is to check if httpd service is alive or not
#Author: Jiazhi Yang
#Date: 14/11/2016
#Script Name: checkhttpd.sh

service=`netstat -lnp |grep httpd |awk '{print $7}' |awk -F'/' '{print $2}'`

if [ "$service" == "httpd" ]; then

        echo "Service httpd is alive!"
else
        /etc/init.d/httpd restart |mail -s "Service httpd restarted!!" xxxx@139.com

        echo "httpd restarting finished!"       
fi


*/1 * * * * /bin/bash /data/yangjz/exercise/checkhttpd.sh

0

nmzhaoliming

赞同来自:

学习

0

rjx3201

赞同来自:

答案

0

sun330

赞同来自:

#!/bin/bashwhile :;do  a=`netstat -lnp |grep ":80"`  if [ -z $a ];then      echo "port80 is down" | mail -s port80 is down XXX@qq.com      /etc/init.d/httpd restart  fi  sleep 30done

0

Ject1992he - linux学习

赞同来自:

学习

0

Ject1992he - linux学习

赞同来自:

学习

0

Youcan

赞同来自:

Image.png

0

liyanlong

赞同来自:

学习下

0

hch735347147

赞同来自:

学习

0

loujb

赞同来自:

OK

0

monga

赞同来自:

1

0

monga

赞同来自:

#!/bin/bash

a=`netstat -plnp |grep 8080 |grep -v grep |wc -l`

echo $a

if [ $a -eq 0 ]

then

    /etc/init.d/httpd start

    if [ $? -eq 0 ]

    then

       echo "succefully" |mail -s '111' 1021887808@qq.com

    fi

else

   echo "OK"

fi

0

大雁

赞同来自:

while :

do

  /bin/netstat -lnp |grep :80 > /dev/null

  if [ $? != 0 ]

  then

    /usr/local/apache2/bin/apachectl restart >/dev/null

    echo "Restart Apache"

  fi

sleep 30

done

~

0

1ijinna

赞同来自:

1

0

vanjle

赞同来自:

mak

0

王斌

赞同来自:

#! /bin/bash

n=`netstat -lnp | awk '{print $4}' | grep ':80'`

if [ -z $n ]

then

   /etc/init.d/httpd start

   mail -s "80 port is down" test@163.com

fi

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: