Download bt-source/panel/class/mailModel/script/monitor_script.py from SZFSPC/apple: direct link, hf CLI and curl.
- Browser
- Download file 3.27 kB
-
https://huggingface.co/spaces/SZFSPC/apple/resolve/main/bt-source/panel/class/mailModel/script/monitor_script.py
- Command line
-
hf download hf://spaces/SZFSPC/apple/bt-source/panel/class/mailModel/script/monitor_script.py
-
curl -L -o monitor_script.py https://huggingface.co/spaces/SZFSPC/apple/resolve/main/bt-source/panel/class/mailModel/script/monitor_script.py
3.27 kB
| #!/usr/bin/python | |
| # coding: utf-8 | |
| # ----------------------------- | |
| # 定时检测并管理服务状态 | |
| # ----------------------------- | |
| import subprocess | |
| import time | |
| import datetime | |
| import os,sys, time, re | |
| os.chdir('/www/server/panel') | |
| sys.path.insert(0,'./') | |
| sys.path.insert(1,'class/') | |
| sys.path.insert(2,'BTPanel/') | |
| sys.path.insert(3,'/www/server/panel/plugin/mail_sys') | |
| import public | |
| class ServiceMonitor: | |
| def __init__(self, services=['dovecot', 'postfix', 'rspamd']): | |
| self.services = services | |
| def check_service_status(self, service_name: str) -> bool: | |
| """ | |
| 检查指定服务的状态 | |
| :param service_name: 服务名称 | |
| :return: True 如果服务正在运行,False 否则 | |
| """ | |
| try: | |
| result = subprocess.run(['systemctl', 'is-active', service_name], capture_output=True, text=True) | |
| print(f"0000 checking {service_name} result:{result}") | |
| return result.returncode == 0 | |
| except Exception as e: | |
| print(f"Error checking {service_name} status: {e}") | |
| return False | |
| def restart_service(self, service_name: str): | |
| """ | |
| 重启指定的服务 | |
| :param service_name: 服务名称 | |
| """ | |
| try: | |
| print(f"Restarting {service_name}...") | |
| subprocess.run(['systemctl', 'restart', service_name], check=True) | |
| print(f"Successfully restarted {service_name}") | |
| except subprocess.CalledProcessError as e: | |
| print(f"Failed to restart {service_name}: {e}") | |
| def run_monitor(self): | |
| """ | |
| 开始监控服务状态 | |
| """ | |
| # import public.PluginLoader as plugin_loader | |
| # bulk = plugin_loader.get_module('{}/plugin/mail_sys/mail_send_bulk.py'.format(public.get_panel_path())) | |
| # SendMailBulk = bulk.SendMailBulk | |
| alarm = False | |
| args = public.dict_obj() | |
| args.keyword = 'mail_server_status' | |
| from mailModel import bulkModel | |
| SendMailBulk = bulkModel.main | |
| try: | |
| send_task = SendMailBulk().get_alarm_send(args) | |
| except: | |
| public.print_log(public.get_error_info()) | |
| send_task = False | |
| if send_task and send_task.get('status', False): | |
| alarm = True | |
| for service in self.services: | |
| if not self.check_service_status(service): | |
| # 告警 | |
| if alarm: | |
| # body = f"Your Mail Service [{service}] is down. \n\n" | |
| body = [f">Send content:Your Mail Service [{service}] is down, Restarting..."] | |
| # 推送告警信息 | |
| args1 = public.dict_obj() | |
| args1.keyword = 'mail_server_status' | |
| args1.body = body | |
| # self.send_mail_data(args1) | |
| try: | |
| SendMailBulk().send_mail_data(args1) | |
| except: | |
| public.print_log(public.get_error_info()) | |
| self.restart_service(service) | |
| print(f"{service} 未运行,已重启") | |
| else: | |
| print(f"{service} 正常运行") | |
| if __name__ == '__main__': | |
| monitor = ServiceMonitor() | |
| monitor.run_monitor() | |