python开发运维脚本
时间: 2025-07-01 12:49:49 浏览: 5
### 如何用 Python 编写运维脚本
以下是基于需求编写的 Python 运维脚本示例,该脚本用于检测本地主机的 80 端口状态。如果端口未打开,则会尝试重新启动 HTTPD 服务,并通过电子邮件发送通知。
#### 脚本功能描述
此脚本实现的功能如下:
1. 定期检查本地主机的 80 端口是否处于监听状态。
2. 如果端口关闭,则重启 `httpd` 或 `apache2` 服务(具体取决于操作系统和服务名称)。
3. 发送一封邮件通知管理员当前的状态变化。
---
#### 实现代码
```python
import socket
import smtplib
from email.mime.text import MIMEText
import subprocess
import time
def check_port(host, port):
""" 检查指定端口是否开放 """
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
try:
s.settimeout(3)
s.connect((host, port))
return True
except Exception:
return False
def restart_httpd():
""" 重启 httpd/apache2 服务 """
try:
result = subprocess.run(["sudo", "service", "httpd", "restart"], capture_output=True, text=True)
if "failed" in result.stderr or "error" in result.stdout.lower():
raise RuntimeError("Service Restart Failed")
except Exception as e:
send_email(f"Error restarting service: {e}")
def send_email(message):
""" 发送邮件通知 """
sender = '[email protected]'
receiver = '[email protected]'
password = 'your-password'
msg = MIMEText(message)
msg['Subject'] = 'Port Check Alert!'
msg['From'] = sender
msg['To'] = receiver
try:
server = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login(sender, password)
server.sendmail(sender, [receiver], msg.as_string())
server.quit()
except Exception as e:
print(f"Failed to send email: {e}")
if __name__ == "__main__":
host = '127.0.0.1' # 本地主机
port = 80 # 需要监控的端口号
interval = 30 # 检测间隔时间 (秒)
while True:
if not check_port(host, port): # 如果端口不可达
message = f"{time.strftime('%Y-%m-%d %H:%M:%S')} - Port {port} is closed! Attempting to restart the service..."
print(message)
send_email(message)
restart_httpd() # 尝试重启服务
else:
print(f"{time.strftime('%Y-%m-%d %H:%M:%S')} - Port {port} is open.")
time.sleep(interval) # 设置检测间隔
```
---
#### 功能说明
1. **端口检查逻辑**
使用 `socket` 库创建 TCP 套接字连接到目标主机和端口,验证其连通性[^1]。
2. **服务管理**
利用 `subprocess` 执行系统命令来控制服务的启停操作。这里假设 Linux 平台下的 Apache Web Server 的服务名为 `httpd`[^1]。
3. **邮件通知机制**
结合 SMTP 协议向预设邮箱地址发送告警消息,在异常情况下及时告知维护人员[^2]。
4. **定时任务支持**
主程序运行在一个无限循环中,每次迭代之间暂停固定时间段以减少资源消耗[^3]。
---
#### 注意事项
- 替换模板中的占位符如 `[email protected]`, `password` 和 SMTP 地址等内容为实际可用配置项。
- 对于不同平台可能需要调整服务名参数;例如 Ubuntu 上通常称为 `apache2`.
- 此外还需赋予适当权限以便能够成功调用特权指令 (`sudo`) 来完成某些动作比如停止/启动服务器进程等行为.
阅读全文
相关推荐

















