返回列表 发帖

Python3管理Linux的软件进程

笺注:这是在 CentOS6.9编译安装Zabbix4.4.5 的基础上进行的。


Python的版本信息:
[root@Zabbix_server_01 ~]# python3 --version
Python 3.6.8


查看Apache的进程信息:
[root@Zabbix_server_01 ~]# ps -ef |grep httpd |grep -v grep
root       1951      1  0 03:39 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1981   1951  0 03:39 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1982   1951  0 03:39 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1983   1951  0 03:39 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1984   1951  0 03:39 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1985   1951  0 03:39 ?        00:00:00 /usr/local/apache/bin/httpd -k start
[root@Zabbix_server_01 ~]#


查看MySQL的进程信息:(关键字“mysql”可以使用单引号或双引号,也可以不用)
[root@Zabbix_server_01 ~]# ps -ef |grep mysql |grep -v grep
root       1419      1  0 03:39 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid
mysql      1903   1419  2 03:39 ?        00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/var/Zabbix_server_01.err --open-files-limit=65535 --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid --socket=/tmp/mysql.sock --port=3306
[root@Zabbix_server_01 ~]#

[root@Zabbix_server_01 ~]# ps -ef |grep 'mysql' |grep -v grep
root       1419      1  0 03:39 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid
mysql      1903   1419  2 03:39 ?        00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/var/Zabbix_server_01.err --open-files-limit=65535 --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid --socket=/tmp/mysql.sock --port=3306
[root@Zabbix_server_01 ~]#

[root@Zabbix_server_01 ~]# ps -ef |grep "mysql" |grep -v grep
root       1419      1  0 03:39 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid
mysql      1903   1419  2 03:39 ?        00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/var/Zabbix_server_01.err --open-files-limit=65535 --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid --socket=/tmp/mysql.sock --port=3306
[root@Zabbix_server_01 ~]#



######

检测Apache、MySQL服务是否在运行中的脚本:
[root@Zabbix_server_01 ~]# cat xx.py
#coding=utf-8  
import os

process_1 = len(os.popen("ps -ef |grep httpd |grep -v grep").readlines())
print(process_1)

if process_1 >= 1:
        print('Apache is working.')
else:
        print('Apache is down.')

print("-" * 10)

process_2 = len(os.popen("ps -ef |grep 'mysql' |grep -v grep").readlines())
print(process_2)

if process_2 >= 1:
        print('MySQL is working.')
else:
        print('MySQL is down.')


设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x xx.py


运行脚本的效果:(Apache、MySQL服务都正在运行时)
[root@Zabbix_server_01 ~]# python3 xx.py
6
Apache is working.
----------
2
MySQL is working.
[root@Zabbix_server_01 ~]#


运行脚本的效果:(Apache、MySQL服务都没有运行时)
[root@Zabbix_server_01 ~]# python3 xx.py
0
Apache is down.
----------
0
MySQL is down.
[root@Zabbix_server_01 ~]#





######

关闭Apache、MySQL服务的脚本:
[root@Zabbix_server_01 ~]# cat yy.py
#coding=utf-8
import os

command_1 = 'killall -9 httpd' #杀死Apache的进程,等于关闭Apache服务
command_2 = 'service mysql stop'

os.system(command_1)
os.system(command_2)


设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x yy.py


运行脚本的效果:(Apache、MySQL服务都关闭成功)
[root@Zabbix_server_01 ~]# python3 yy.py
Shutting down MySQL.... SUCCESS!
[root@Zabbix_server_01 ~]#





######

启动Apache、MySQL服务的脚本:
[root@Zabbix_server_01 ~]# cat zz.py
#coding=utf-8
import os

command_1 = 'service httpd start'
command_2 = 'service mysql start'

os.system(command_1)
os.system(command_2)


设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x zz.py


运行脚本的效果:(Apache、MySQL服务都启动成功)
[root@Zabbix_server_01 ~]# python3 zz.py
start apache...  done
Starting MySQL.. SUCCESS!
[root@Zabbix_server_01 ~]#





######

重启Apache、MySQL服务的脚本:
[root@Zabbix_server_01 ~]# cat rr.py
#coding=utf-8
import os

command_1 = 'service httpd restart'
command_2 = 'service mysql restart'

os.system(command_1)
os.system(command_2)


设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x rr.py


运行脚本的效果:(Apache、MySQL服务都重启成功)
[root@Zabbix_server_01 ~]# python3 rr.py
restart apache...  done
Shutting down MySQL... SUCCESS!
Starting MySQL.. SUCCESS!
[root@Zabbix_server_01 ~]#





######

检测Apache、MySQL服务是否在运行中的脚本:(使用函数)
[root@Zabbix_server_01 ~]# cat han.py
#coding=utf-8  
import os
               
def func1(Key_1,String_1):
        process_1 = len(os.popen(String_1).readlines())

        if process_1 >= 1:
                print(f"{Key_1} is working.")
        else:
                print(f"{Key_1} is down.")

if __name__ == '__main__':

        Key_1 = "Apache"
        String_1 = "ps -ef |grep httpd |grep -v grep"
        func1(Key_1,String_1)
       
        print("-" * 10)
       
        Key_1 = "MySQL"
        String_1 = "ps -ef |grep mysql |grep -v grep"
        func1(Key_1,String_1)


设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x han.py

[root@Zabbix_server_01 ~]# pgrep -l http
3762 httpd
3768 httpd
3769 httpd
3771 httpd
3772 httpd
3773 httpd
[root@Zabbix_server_01 ~]#
[root@Zabbix_server_01 ~]# pgrep -l mysql
3784 mysqld_safe
4268 mysqld
[root@Zabbix_server_01 ~]#
[root@Zabbix_server_01 ~]# service httpd stop
stop apache...  done
[root@Zabbix_server_01 ~]#
[root@Zabbix_server_01 ~]# pgrep -l http
[root@Zabbix_server_01 ~]#

运行脚本的效果:
[root@Zabbix_server_01 ~]# python3 han.py
Apache is down.
----------
MySQL is working.
[root@Zabbix_server_01 ~]#





######

检测Apache、MySQL服务是否在运行中的脚本:(使用类)
[root@Zabbix_server_01 ~]# cat lei.py
#coding=utf-8  
import os
                       
class class1():
   
        def __init__(self,Key_1,String_1):
                self.Key_1 = Key_1
                self.String_1 = String_1
       
        def func1(self):

                process_1 = len(os.popen(self.String_1).readlines())

                if process_1 >= 1:
                        print(f"{self.Key_1} is working.")
                else:
                        print(f"{self.Key_1} is down.")
               
if __name__ == '__main__':

        Key_1 = "Apache"
        String_1 = "ps -ef |grep httpd |grep -v grep"
        myclass = class1(Key_1,String_1)
        myclass.func1()
       
        print("-" * 10)
       
        Key_1 = "MySQL"
        String_1 = "ps -ef |grep mysql |grep -v grep"
        myclass = class1(Key_1,String_1)
        myclass.func1()


设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x lei.py

[root@Zabbix_server_01 ~]# pgrep -l http
4427 httpd
4428 httpd
4429 httpd
4430 httpd
4431 httpd
4432 httpd
[root@Zabbix_server_01 ~]# pgrep -l mysql
3784 mysqld_safe
4268 mysqld
[root@Zabbix_server_01 ~]#
[root@Zabbix_server_01 ~]# service mysql stop
Shutting down MySQL.... SUCCESS!
[root@Zabbix_server_01 ~]#
[root@Zabbix_server_01 ~]# pgrep -l mysql
[root@Zabbix_server_01 ~]#

运行脚本的效果:
[root@Zabbix_server_01 ~]# python3 lei.py
Apache is working.
----------
MySQL is down.
[root@Zabbix_server_01 ~]#





######

把Apache、MySQL服务的进程信息写入日志文件:

[root@Zabbix_server_01 ~]# cat /scripts/qq.py
#coding=utf-8
import os

command_a1 = "Check_time=`date +'%Y%m%d_%H%M%S'` && echo -e '\n检测时间:' $Check_time >> /root/1.log" # \n 换行符
command_a2 = "ps -ef |grep httpd |grep -v grep >> /root/1.log" # >> 把输出结果写入(追加)到文件;假如文件不存在会自动创建
os.system(command_a1)
os.system(command_a2)

command_b1 = "Check_time=`date +'%Y%m%d_%H%M%S'` && echo -e '\n检测时间:' $Check_time >> /root/2.log"
command_b2 = "ps -ef |grep mysql |grep -v grep >> /root/2.log"
os.system(command_b1)
os.system(command_b2)


设置脚本权限:
[root@Zabbix_server_01 ~]# chmod a+x /scripts/qq.py


开机自动运行脚本“qq.py ”:
[root@Zabbix_server_01 ~]# which python3
/usr/local/bin/python3

[root@Zabbix_server_01 ~]# echo 'cd /scripts && /usr/local/bin/python3 qq.py ' >> /etc/rc.local
[root@Zabbix_server_01 ~]# cat !$
cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
/usr/local/zabbix/sbin/zabbix_agentd
/usr/local/zabbix/sbin/zabbix_server
cd /scripts && /usr/local/bin/python3 qq.py
[root@Zabbix_server_01 ~]#


重启服务器:
[root@Zabbix_server_01 ~]# init 6
[root@Zabbix_server_01 ~]#


服务器重启后,查看日志文件:(实验中,服务器重启了两次)
[root@Zabbix_server_01 ~]# cat 1.log

检测时间: 20190204_035109
root       1928      1  0 03:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1938   1928  0 03:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1939   1928  0 03:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1940   1928  0 03:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1941   1928  0 03:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1942   1928  0 03:51 ?        00:00:00 /usr/local/apache/bin/httpd -k start

检测时间: 20190204_035305
root       1915      1  0 03:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1925   1915  0 03:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1926   1915  0 03:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1927   1915  0 03:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1928   1915  0 03:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
www        1929   1915  0 03:53 ?        00:00:00 /usr/local/apache/bin/httpd -k start
[root@Zabbix_server_01 ~]#


[root@Zabbix_server_01 ~]# cat 2.log

检测时间: 20190204_035109
root       1417      1  0 03:51 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid
mysql      1901   1417  7 03:51 ?        00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/var/Zabbix_server_01.err --open-files-limit=65535 --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid --socket=/tmp/mysql.sock --port=3306

检测时间: 20190204_035305
root       1404      1  0 03:53 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid
mysql      1888   1404  6 03:53 ?        00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/var/Zabbix_server_01.err --open-files-limit=65535 --pid-file=/usr/local/mysql/var/Zabbix_server_01.pid --socket=/tmp/mysql.sock --port=3306
[root@Zabbix_server_01 ~]#





相关文章:
自定义类

Python3调用Linux命令
Python3管理Windows的软件进程

返回列表