需求:某公司因为网站服务经常出现异常,需要你开发一个脚本对服务器上的服务进行监控;检测目标服务器上是否存在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)