利用shell脚本实现自动监控系统服务,命令操作详

问题描述:  

目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户

sed命令

我的 Arch Linux 已经用了快半年多,由于 Arch Linux 的滚挂问题,我从没有直接升级过系统。软件版本以及库自然落后了一些。

条件:  1. 主机及子机IP地址,hostname已确定;

-n 静默模式,不输出模式空间中的内容

就在我准备需要用到 NFS 时,挂载网络文件系统时由于 librpc 太旧而失败了。所以看来我得更新 librpc 了。用 yaourt -Ss 查看了一下源上的版本。

     2. 主机与子机能够免密通讯,即基于密匙通讯(相关命令:ssh-keygen;ssh-copy-id -i web1);

编辑命令:

  最新的 NFS 需要 libtirpc.so.3 而我的却是 libtirpc.so.1 。最后安装了 libtirpc-1.0.1-2 后。悲剧发生了。任何用到 sudo , 以及 su 的地方,均出现如下错误:

需要的文件:

d:删除

sudo: PAM authentication error: Module is unknown

      1. python邮件发送工具;

地址定界:

  我意识到,我一旦重启了将无法开机了。本来已经天晚,心想睡吧。明天再弄,先不关电脑就好。

     2. nfc.sh监控脚本,监控nginx及nfs服务状态,并调用mail发送工具通知用户;    

startline,endline

结果,第二天发现屏幕已锁定,突然又明白了什么。果然尼码,认证失败。根本登不进去!真是悲剧。

     3. nfc-install.sh监控部署脚本,运行在主机,为子机配置文件,执行命令;

1,3

解决办法:

详细代码:

 

  我参考 上别人的讨论。发现别人是更新系统导致的,虽然降了 libtirpc 的版本,但是其他依赖没有降下去。当然他是失败。

  1. 邮件发送工具

/part1/,/part2/  匹配范围之间

但是我不一样,我仅仅更新了 libtirpc ,而且当时我发现并没有安装任何的依赖软件包。所以我认为我只要降回原来 libtirpc 的版本。便能解决问题。

将以下代码创建到“/usr/bin/mail”文件内,并赋予执行权限(chmod x /usr/bin/mail)

/part/ 匹配到所匹配的字符

具体做法:

图片 1

 

  重启,进入 Grub 引导界面,按 e 编辑内核启动参数。如图,在 linux 那行末尾添加 single 以单用户身份启动,进入电源模式:

 

-n:静默模式,只显示匹配字符串或者行.

 图片 2

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import smtplib
import email.mime.multipart
import email.mime.text

server = 'smtp.163.com'
port = '25'

def sendmail(server,port,user,pwd,msg):
    smtp = smtplib.SMTP()
    smtp.connect(server,port)
    smtp.login(user, pwd)
    smtp.sendmail(msg['from'], msg['to'], msg.as_string())
    smtp.quit()
    print('邮件发送成功email has send out !')


if __name__ == '__main__':
    msg = email.mime.multipart.MIMEMultipart()
    msg['Subject'] = 'check your service of nginx and nfs'
    msg['From'] = 'python4_mail@163.com'
    msg['To'] = 'python4_recvmail@163.com'
    user = 'python4_mail'
    pwd = '123456789'
    content='%sn%s' %('n'.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式处理,专门针对我们的邮件格式

    txt = email.mime.text.MIMEText(content, _charset='utf-8')
    msg.attach(txt)

    sendmail(server,port,user,pwd,msg)

a 在当前行下面插入文本。

  然后按 Ctrl x 启动。启动后,请求输入 root 密码登录。此时可以成功登录 ( 暂时没深究过为什么 )。

View Code

i 在当前行上面插入文本。

登录后,就有一个 Shell 可用了,而且还是 root 账户。

python通过SMTP发送邮件失败:
错误1:smtplib.SMTPAuthenticationError: (550, b‘User has no permission‘)
     我们使用python发送邮件时相当于自定义客户端根据用户名和密码登录,然后使用SMTP服务发送邮件,新注册的163邮箱是默认不开启客户端授权的(对指定的邮箱大师客户端默认开启),因此登录总是被拒绝,解决办法(以163邮箱为例):进入163邮箱-设置-客户端授权密码-开启(授权码是用于登录第三方邮件客户端的专用密码)
错误2:smtplib.SMTPAuthenticationError: (535, b‘Error: authentication failed‘)
    以163邮箱为例,在开启POP3/SMTP服务,并开启客户端授权密码时会设置授权码,将这个授权码代替smtplib.SMTP().login(user,password)方法中的password即可。

r:在匹配航之后引入另一个文件内容.

# cd /var/cache/pacman/pkg
# ls -l | grep rpc 
librpcsecgss-0.19-8-x86_64.pkg.tar.xz
libtirpc-0.3.2-2-x86_64.pkg.tar.xz
libtirpc-1.0.1-2-x86_64.pkg.tar.xz
rpcbind-0.2.3-3-x86_64.pkg.tar.xz

2. nfc.sh监控脚本图片 3

w:将匹配到的行输出到另一个文件.

  显然 libtirpc-0.3.2 是我之前合适的版本。(因为知道 Arch Linux 已滚挂,所以一直没清理 pacman 安装过的软件包 ,如果你清理了,那就得费功夫找你原来版本的包了。)

 

p:将匹配的行打印出来(也会输出原文件的内容),pn只显示打印的行.

# pacman -U libtirpc-0.3.2-2-x86_64.pkg.tar.xz
#! /bin/bash

#nginx及nfs服务监控脚本,如果异常,将发送邮件通知
function monitor_nfc() {
systemctl status nginx
nginx=$?
systemctl status nfs
nfs=$?
clear
if [ $nginx -eq 0 ] && [ $nfs -eq 0 ]
        then
        msg="TIME:$(date  %F_%T)
            HOSTNAME:$(hostname)
            IPADDR:$(ifconfig |awk 'NR==2{print $2}')
            MSG:nginx.service and nfs.service is both running"
         echo msg
#        /usr/bin/mail $msg    #服务运行正常,不发送邮件通知
elif [ $nginx -ne 0 ] && [ $nfs -eq 0 ]
        then
        msg="TIME:$(date  %F_%T)
             HOSTNAME:$(hostname)
             IPADDR:$(ifconfig |awk 'NR==2{print $2}')
             MSG:nginx.service is dead,nfs.service is running"
        echo $msg
        /usr/bin/mail $msg
elif [ $nginx -ne 0 ] && [ $nfs -ne 0 ]
        then
        msg="TIME:$(date  %F_%T)
             HOSTNAME:$(hostname)
             IPADDR:$(ifconfig |awk 'NR==2{print $2}')
             MSG:nginx.service and nfs.service is both dead"
        echo $msg
        /usr/bin/mail $msg
elif [ $nginx -eq 0 ] && [ $nfs -ne 0 ]
        then
        msg="TIME:$(date  %F_%T)
             HOSTNAME:$(hostname)
             IPADDR:$(ifconfig |awk 'NR==2{print $2}')
             MSG:nginx.service is running,nfs.service is dead"
        echo $msg
        /usr/bin/mail $msg

fi
}


monitor_nfc &>> /tmp/monitor.log

[[:upper:]] 匹配以大写字母开头的行.

  成功安装后,重启系统,问题便解决了。至于 NFS ,看来我还得好好思考下怎么解决。

View Code

=:显示匹配行的行号,-n和=同时使用,只输出匹配行的行号.

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/144138.htm

  1. nfc-install监控部署脚本

[^]:匹配一个不在指定范围内的字符.

图片 4

图片 5

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。

 

$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。

#! /bin/bash

#首先执行主机的nfc.sh服务监控脚本
/root/nfc.sh

#然后将主机的服务监控脚本nfc.sh和发送邮件文件上传至web机器
for i in {134,135,136}
do
scp /root/nfc.sh 192.168.47.$i:/share/            #将主机的服务监控脚本nfc.sh上传至web机器
scp /usr/bin/mail 192.168.47.$i:/usr/bin/        #将发送邮件文件上传至web机器
ssh root@192.168.47.$i chmod  x /share/nfc.sh        #增加nfc脚本文件的执行权限
ssh root@192.168.47.$i chmod  x /usr/bin/mail        #增加发送邮件文件的执行权限
ssh root@192.168.47.$i /share/nfc.sh            #执行nfc脚本监控功能
done

ssh 192.168.47.133           #最终回到主机终端

. 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

View Code

-f /path/to/sed_script_file :指定sed脚本文件.

详见图片

-e 'script' -e 'script':指定多个编辑命令

图片 6

正则表达式:

结果:

基本的:

主机

字符:. [] [^]

图片 7

次数:* ? {}

子机1

锚定:^ $ < >

图片 8

分组:()

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/144222.htm

引用:1,2,...

图片 9

扩展:

字符:. [] [^]

[[:lower:]]:匹配所有的小写

[[:punct:]]:匹配所有的标点符号

[[:alnum:]]:匹配所有的数字

 

次数:

* ? {m,n}

锚定:

^ $ > <

或:

a|b

分组:

()

引用:

1,2

 

sed '地址定界s@查找条件@替换文本@'  :在指定的定界内查找匹配到的条件做替换

修饰符:

g:global,全局替换

i:ignore-case不区分大小写

1)、[root@localhost ~]# cat /etc/fstab 

 #

# /etc/fstab

# Created by anaconda on Fri Feb 24 02:20:51 2017

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=2020ea71-49cf-488e-bd6c-de72a001082b /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[root@localhost ~]# sed '1,3d' /etc/fstab 

# Created by anaconda on Fri Feb 24 02:20:51 2017

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=2020ea71-49cf-488e-bd6c-de72a001082b ``/boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   ``/dev/shm                tmpfs   defaults        0 0

devpts                  ``/dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   ``/sys                    sysfs   defaults        0 0

proc                    ``/proc                   proc    defaults        0 0 

-n 参数

sed -n '1,3d' /etc/fstab 不会输出任何东西,静默模式

2)、删除所有以#号开头的行:

[root@localhost ~]``# sed '/^#/d' /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=2020ea71-49cf-488e-bd6c-de72a001082b ``/boot                   ext4    defaults        1 2

本文由ca88手机版登录发布于ca88手机版,转载请注明出处:利用shell脚本实现自动监控系统服务,命令操作详

TAG标签: ca88手机版登录
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。