题目:
需求:某公司因为网站服务经常出现异常,需要你开发一个脚本对服务器上的服务进行监控;检测目标服务器上是否存在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端口
代码:
"""
需求:某公司因为网站服务经常出现异常,需要你开发一个脚本对服务器上的服务进行监控;检测目标服务器上是否存在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
# 与操作系统进行交互
import os
# 用于执行外部命令
import subprocess
# 检测操作系统信息
import platform
#采用日志输出并记录
from my_log import DailyLogger
logger = DailyLogger('my_logger')
#准备登录信息
host = "192.168.xxx.xxx"
username = "root"
password = "123"
logger.info(f"准备连接远程主机: {host}")
logger.info(f"当前登录账号{username}")
#创建SSH对象,连接远程服务器
logger.info("准备SSH连接")
#创建SSH连接对象
ssh = paramiko.SSHClient()
#忽略连接警告--known_hosts提示
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname=host, username=username, password=password)
def execute_command(command):
# 执行系统命令并返回结果
try:
#
result = subprocess.run(command, capture_output=True, text=True, shell=True)
# 返回命令的标准输出,去掉前后的空白字符
return result.stdout.strip()
except Exception as e:
logger.info(f"command execution failed:{e}")
return None
def detect_os():
# 检测操作系统类型
system_info = execute_command('uname -a')
if 'Ubuntu' in system_info:
return 'Ubuntu'
elif 'Red Hat' in system_info or 'CentOS' in system_info:
return 'Red Hat'
else:
return 'Unknown'
def is_nginx_installed():
# 检查是否安装了Nginx
result = execute_command('nginx -v')
return result is not None and 'nginx' in result
def install_nginx(distro):
# 根据操作系统类型安装Nginx
if distro == 'Ubuntu':
os.system('sudo apt-get update')
os.system('sudo apt-get install -y nginx')
elif distro == 'RedHat':
os.system('sudo yum install -y nginx')
else:
logger.info(f"Unsupproted Linux distribution :{distro}")
def is_nginx_running():
# 检查Nginx服务是否运行
result = execute_command('systemctl is-active nginx')
return result == 'active'
def start_ngix_service():
# 启动Nginx服务
os.system('sudo systemctl start nginx')
def check_nginx_service():
# 检测操作系统
distro = detect_os()
logger.info(f"Detected OS:{distro}")
# 检查Nginx是否安装
if not is_nginx_installed():
logger.info("Nginx并未安装,正在安装中")
install_nginx(distro)
else:
logger.info("Nginx已经安装.")
# 检查Nginx服务是否运行
if not is_nginx_running():
logger.info("Nginx没有运行. ")
start_ngix_service()
if is_nginx_running():
logger.info("Nginx启动成功.")
else:
logger.info("未能启动Nginx.")
else:
logger.info("Nginx已经启动")
#关闭连接
ssh.close()