python第六次作业

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

- 提示1:检测服务器操作系统,推荐命令:`uname -a`,从它里面提取关键字检测
- 提示2:unbutn安装命令`apt install 软件名称`,redhat安装命令`yum install 软件名称`
- 提示3:nginx是一个软件,启动之后就会是一个名称为nginx的服务,提供网站服务-启动之后能在80端口访问到一个默认页面`http://192.168.0.200:80`等价于`http://192.168.0.200`,因为`http://`协议默认端口-80端口;需要注意`https://`默认端口-443端口

import paramiko

def check_nginx_remotely(hostname, username, password):
    """
    远程检查并启动 Nginx 服务

    此函数通过 SSH 连接远程服务器,检查 Nginx 是否安装并启动服务
    如果 Nginx 未安装,将根据操作系统自动安装并启动 Nginx

    参数:
    hostname (str): 服务器主机名或 IP 地址
    username (str): SSH 登录用户名
    password (str): SSH 登录密码
    """
    # 创建 SSH 客户端实例
    ssh = paramiko.SSHClient()
    # 自动添加主机密钥策略
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    try:
        # 尝试连接远程服务器
        ssh.connect(hostname, username=username, password=password)
        # 执行命令检查 Nginx 是否安装
        stdin, stdout, stderr = ssh.exec_command('which nginx')
        output = stdout.read().decode().strip()
        if output :
            # 如果已安装 Nginx,检查服务状态
            print("远程服务器上已安装 Nginx")
            stdin, stdout, stderr = ssh.exec_command('systemctl is-active nginx')
            output = stdout.read().decode().strip()
            if output == 'inactive' :
                # 如果服务未启动,则启动 Nginx 服务
                print("Nginx 服务未启动")
                _, stdout, stderr = ssh.exec_command('systemctl start nginx')
                print("已启动")
        else:
            # 如果未安装 Nginx,根据操作系统进行安装
            print("远程服务器上未安装 Nginx")
            stdin, stdout, stderr = ssh.exec_command('uname -a')
            output = stdout.read().decode().strip()
            string = output
            keyword = "Linux"
            if keyword in string:
                # 如果是 Linux 系统,使用 yum 安装 Nginx
                print("检测系统为Linux,即将为您安装nginx服务")
                stdin, stdout, stderr = ssh.exec_command('yum install -y nginx')
                stdout.read().decode().strip()
                print("安装完成")
                stdin, stdout, stderr = ssh.exec_command('systemctl start nginx')
                stdout.read().decode().strip()
                print("启动完成")
            else :
                # 如果是 Ubuntu 系统,使用 apt 安装 Nginx
                print("检测系统为Ubuntu,即将为您安装nginx服务")
                stdin, stdout, stderr = ssh.exec_command('apt install -y nginx')
                stdout.read().decode().strip()
                print("安装完成")
                stdin, stdout, stderr = ssh.exec_command('systemctl start nginx')
                stdout.read().decode().strip()
        #通过验证是否能打开对应ip网页检测nginx服务是否正常启动
        import webbrowser
        def open_webpage_by_ip(ip_address):
            try :
                webbrowser.open(ip_address)
                print("Nginx 服务已启动")
            except :
                print("Nginx 服务未正常启动")
        # 要打开的网页的 IP 地址
        ip_address = "192.168.157.129"
        open_webpage_by_ip(ip_address)
    except paramiko.AuthenticationException:
        # 认证失败时的错误处理
        print("认证失败,请检查用户名和密码")
    except paramiko.SSHException as e:
        # SSH 连接错误处理
        print(f"SSH 连接错误: {e}")
    finally:
        # 确保 SSH 连接关闭
        ssh.close()

# 替换为实际的服务器主机名、用户名和密码
hostname = '192.168.157.129'
username = 'root'
password = '970329'
# 调用函数检查远程服务器上的 Nginx 服务
check_nginx_remotely(hostname, username, password)

### Python 第六次作业题目及要求 #### 一、课程复习与巩固 为了帮助学生更好地掌握所学的知识,第六次作业通常会涉及之前学习过的重要概念和技术。这可能包括但不限于函数定义、模块导入以及面向对象编程的基础。 对于具体实现方面,在此提供一个基于面向对象的学生管理系统的简化版本作为例子[^3]: ```python class Student: def __init__(self, name, age, grade): self.name = name self.age = age self.grade = grade def display_student(self): return f'Name: {self.name}, Age: {self.age}, Grade: {self.grade}' students_list = [] def add_student(): student_name = input('Enter the new student\'s name:') student_age = int(input('Enter the new student\'s age:')) student_grade = float(input('Enter the new student\'s grade:')) students_list.append(Student(student_name,student_age,student_grade)) def list_students(): for i in range(len(students_list)): print(f'Student No.{i+1}:',end=' ') print(students_list[i].display_student()) add_student() list_students() ``` 上述代码展示了如何创建`Student`类并利用它来进行简单的增删改查操作。当然实际应用中还需要考虑更多细节比如异常处理等。 #### 二、综合实践——开发小型应用程序 鼓励同学们尝试构建一个小规模的应用程序来解决现实生活中的某个问题或模拟某种场景。例如可以参考纸牌游戏的设计思路[^2],通过编写Python脚本来完成特定功能的游戏逻辑;也可以继续深化前面提到的学生管理系统,增加更多的交互性和实用性特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值