Browsed by
Tag: 守护

使用python编写简单的守护进程

使用python编写简单的守护进程

server程序与桌面程序最基本的差别在于:server程序通常需要更加稳定地运行,最好是永远都不会中断,确保服务的持续性。

要做到这点,首先当然应当提高程序本身的稳定性,程序本身必须足够稳定才有意义。

然而,天有不测风云,无论多简单的软件,总是会有bug,会有可能导致程序crash。这种情况下,仅仅依赖提高程序本身的稳定性是不够的。我们还需要另外的手段来保证服务的持续性。

最简单的办法就是用守护进程监视当前程序,一旦发生异常或者crash,就重新启动程序。使用python就可以简单地做到这点。
例如,我们通过python脚本(start_mss_app.py)来监视msscli服务程序的运行:

#start_mss_app.py -- run and monitor msscli application

import os
import sys

sys.path.append("./")

def monitor(appName):
    pid = os.fork()

    if 0 == pid:	# child process
        os.system(appName)
        sys.exit(0)

    else:  # parent process
        os.wait()

if __name__ == '__main__' :
    while 1:
        monitor('./msscli')

运行时很简单,使用命令 python start_mss_app.py & 即可。

当msscli程序发生异常导致crash或者退出时,python脚本会自动重起msscli程序。

在进行系统维护或者升级时,我们也有必要强制关掉msscli服务程序,此时由于上述守护进程的存在,我们先必须kill掉守护进程,然后才能kill掉msscli服务程序:

sudo killall python

sudo killall msscli