rc脚本的编写,普通和daemon模式启动

本文档介绍了如何编写一个Python脚本来启动、停止、重启和检查服务的状态,包括普通模式和守护进程(daemon)模式。脚本使用了os和subprocess模块来执行shell命令,通过类Progames实现程序的初始化、启动、停止、重启和状态检查等功能。此外,还展示了如何处理PID文件,以及如何从配置文件读取启动参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、编写启动脚本
1.写一个启动脚本。
对mencached做启动脚本。
2.先把一个结构搭建好。
import sys
class Progames(object):  # 创建一个类
    def __init__(self, name, progame, workdir, args):  # 通过构造函数,在脚本运行的时候就传入4个参数,就不用手动去指定参数了。
        self.name = name
        self.progame = progame
        self.args = args
        self.workdir = workdir
    def _init(self):       #初始化普通的方法。判断有没有目录,如果没有就创建。
     
    def start(self):  # 定义start 方法。启动程序
        
    def stop(self):  # 定义stop方法,关闭程序

    def restart(self):  # 定义重启方法,重启程序,也就是执行关闭和启动的方法。
        self.stop()
        self.start()
    def status(self):  # 定义status方法,查看运行情况
    
    def help(self):  # 定义help方法,查看帮助


def main():  # 定义一个函数,通过调用这个函数来控制程序。
    name = 'memcached'                                   #这几个参数就是调用类时初始化传入的参数
    progame = '/usr/bin/memcached'
    workdir = '/var/tmp/memcached'
    args = '-u nobody -p 11211 -c 1024 -m 64'
    pm = Progames(name = name,
                  progame = progame,
                  workdir = workdir,
                  args = args)
      try:                                #判断输入的第一个参数 类似$1
        cmd = sys.argv[1]
    except IndexError, e:              #当捕获了indexerror错误后,输出错误信息
        print("Option error")
        sys.exit()
    if cmd == 'start':               #如果参数为start ,调用start方法
        pm.start()
    elif cm == 'stop':               #如果参数为start ,调用stop方法
        pm.stop()
    elif cm == 'restart':            #如果参数为start ,调用restart方法
        pm.restart()
    elif cm == 'status':             #如果参数为start ,调用status方法
        pm.status()
    else:                            #如果都不是以上参数,输出help信息
        pm.help()
if __name__ == '__main__':  # 如果调用的是本身,就启动main函数。
    main()
3.编写start方法。
1.先对_init方法进行编写。
def _init(self):
      if not os.path.exists(self.workdir):     #判断文件是否存在。如果不存在,创建目录
            os.mkdir(self.workdir)               #不存在就创建目录,
            os.chdir(self.workdir)               #进入目录,chdir 类似cd命令
2.调用from subprocess import PIPE,Popen 来执行shell
from subprocess import PIPE,Popen
    def start(self):  
       cmd = self.progame + ' '+ self.args   #定义启动的命令。shell下的启动命令。
cmd = Popen(cmd,stdout=PIPE,shell=True)
self.pid = p.pid          #p.pid可以得到进程号。用一个对象属性接收一下,方便写入到pid文件中
测试Popen函数,可以看到执行了shell命令。

3.继续定义2个方法,一个是定义pid的绝对路径,一个是定义写入pid文件的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值