python练习题

发布于:2024-11-27 ⋅ 阅读:(105) ⋅ 点赞:(0)

需求:某公司因为网站服务经常出现异常,需要你开发一个脚本对服务器上的服务进行监控;检测目标服务器上是否存在nginx软件(提供web服务的软件),如果不存在则安装(服务器可能的操作系统Ubuntu24/RedHat9);如果nginx软件存在则检查nginx服务是否启动,如果没有启动则启动该服务(为了确认是否启动成功,需要在自己浏览器中访问服务器ip地址对应的URL:$http://192.168.0.200$ 是否能看到nginx启动页面)

远程连接服务器并启动nginx服务

1.远程连接服务器:使用ssh连接

2.检查nginx是否安装和启动

3.验证是否能通过打开对应IP查看Nginx是否启动
import paramiko
from my_logger import MyLogger
#日志对象
logger = MyLogger("paramiko")
def check_nginx_remotely(host, username, password):
    try:
        """
        1.准备登录信息
        2.创建SSH对象,连接远程服务器
        3.检查 Nginx 是否安装
        4.执行命令,检查nginx是否启动
        
        host:主机IP地址
        username:登录用户名
        password:登录密码
        """
        #1.准备登录信息
        logger.info(f"准备连接远程主机:{host}")
        logger.info(f"当前登录账号{username}")


        #2.创建SSH对象,连接远程服务器
        logger.info("准备SSH连接")
        #创建SSH连接对象
        ssh = paramiko.SSHClient()
        #忽略连接警告————known_hosts提示
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
        #连接服务器
        ssh.connect(host,username=username,password=password)

        #3. 检查 Nginx 是否安装
        stdin, stdout, stderr = ssh.exec_command('rpm -qa nginx')
        nginx_installed = len(stdout.read().decode('utf-8').strip()) > 0

        if not nginx_installed:
            logger.info("Nginx 未安装,正在安装...")
            ssh.exec_command('yum install nginx -y')
        else:
            logger.info("Ngin安装成功")
        #4.执行命令,检查nginx是否启动
        stdin,stdout,stderr = ssh.exec_command("systemctl is-active nginx")
        #读取命令执行结果
        result = stdout.read().decode().strip()
        logger.info(f"nginx当前服务状态:{result}")
        #判断是否启动-启动nginx
        if result == "inactive":
            logger.info("nginx服务未启动,政治拉起服务..")
            ssh.exec_command("systemctl start nginx")
        else:
            logger.info("nginx服务经过检测,运行正常")
        #关闭连接
        ssh.close()
    except Exception as e:
        print(f"出现错误:{e}")
        ssh.close()
if __name__ == "__main__":
    host = "192.168.5.132"
    username = "root"
    password = "123456"
    check_nginx_remotely(host, username, password)



网站公告

今日签到

点亮在社区的每一天
去签到