结合 uptime 实现服务挂了重启服务
uptime的监控里面有很多自定义的选项,可惜没法实现自动重启服务,今天介绍一个方法能够连锁反应实现自动重启服务恢复。
在服务器编写一个Python脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from flask import Flask, jsonify
import subprocess
import shlex
app = Flask(__name__)
# 替换为你要执行的单个命令(例如:重启容器命令)
COMMAND = "echo 'hello'" # 这里写你的命令
@app.route('/restart', methods=['GET','POST'])
def run_command():
try:
# 执行命令并捕获输出
result = subprocess.run(
shlex.split(COMMAND),
check=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
return jsonify({"status": "success", "output": result.stdout}), 200
except Exception as e:
return jsonify({"status": "error", "msg": str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=4000, debug=False)
将程序注册为服务:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=API Service to Execute Command
[Service]
User=root
WorkingDirectory=/opt/monitor_script
ExecStart=/usr/bin/python3 /opt/monitor_script/cmd_api.py
Restart=always
RestartSec=5
StandardOutput=append:/var/log/cmd-api.log
StandardError=append:/var/log/cmd-api.log
[Install]
WantedBy=multi-user.target
设置为开机自启动即可:
1
systemctl enable cmd-api.service --now
最后创建一个webhook的通知能够调用这个api就可以实现我们的目标了。
本文由作者按照
CC BY 4.0
进行授权