averainy's Blog

averainy

02 Apr 2022

Monitor Systemd Services With Python

systemd service有时会自动退出。在这种情况下,为了保证服务能够24*7运行,需要额外做一些监控,当服务挂掉之后能够自动重启。这里我使用python写了一个监控脚本,将这个脚本放到定时任务中,就能够做到自动重启的效果。
代码如下

# -*- coding: utf-8 -*-
import subprocess
from subprocess import check_output,run


def get_process_id(service):
    """ 返回服务的主进程 PID """
    cmd = 'systemctl show %s --property=MainPID' % service
    output = check_output(cmd, shell=1).decode('utf8')
    pid = (output.split('\n')[0].split('=')[1])
    return int(pid)
def check_service(service):
    pid = get_process_id(service)
    if pid > 0:
        return
    cmd = 'systemctl start %s' % service
    cmd = ["systemctl","start",service]
    ret = subprocess.run(cmd)
    if ret.returncode == 0:
        print("success:",ret)
    else:
        print("error:",ret)



if __name__ == '__main__':
    check_service("mongod")

这个脚本功能比较简单,也没做异常处理,如果需要自己添加。over.