将python程序做成一个服务

在linxu下会发现有很多的程序都是用service 管理,如nginx,mysql等等
由于项目部署在服务器上,然后每次pull之后,都需要重启(杀进程,再启动),才能生效,就想做成一个服务,方便每次重启,比如service XXX restart。

通过查资料,service都是通过写成shell脚本放在/etc/init.d/ 目录下进行管理的,同时能在目录下找到一些常用的服务。大概看了下,通过查资料写出了如下脚本

  • 代码如下:

    #!/bin/bash
    case "$1" in
    start)
        echo "start test-service
        cd /home/work/python-script
        nohup python /home/tanxu/work/python-script/start.py > /home/tanxu/log.txt 2>&1 &
    ;;
    restart)
        echo "kill test-service"
        ps -ef |grep python |grep /work/python-script/start.py |awk '{printf $2}'|xargs kill -9
        echo "start test-service"
        cd /home/work/python-script
        nohup python /home/work/python-script/start.py > /home/tanxu/log.txt 2>&1 &
    ;;
    stop)
        echo "kill test-service"
        ps -ef |grep python |grep /work/python-script/start.py |awk
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Windows 下,可以使用第三方库 `pywin32` 来将一个 Python 程序打包成 Windows 服务。以下是实现步骤: 1. 安装 `pywin32` 库。可以使用 pip 命令进行安装: ``` pip install pywin32 ``` 2. 编写 Python 程序。可以参考以下示例代码: ```python import time def main(): while True: print('Service is running...') time.sleep(5) if __name__ == '__main__': main() ``` 在该示例代码中,我们定义了一个无限循环来模拟一个长时间运行的服务。 3. 使用 `win32serviceutil` 工具将 Python 程序打包成服务。可以参考以下示例代码: ```python import win32serviceutil import win32service import win32event import servicemanager import socket import sys import time import os class MyService(win32serviceutil.ServiceFramework): _svc_name_ = 'MyService' _svc_display_name_ = 'My Service' _svc_description_ = 'This is my service.' def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.stop_event = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.stop_event) def SvcDoRun(self): self.ReportServiceStatus(win32service.SERVICE_RUNNING) try: main() except Exception as e: servicemanager.LogErrorMsg(str(e)) self.ReportServiceStatus(win32service.SERVICE_STOPPED) def main(): while True: print('Service is running...') time.sleep(5) if __name__ == '__main__': if len(sys.argv) == 1: servicemanager.Initialize() servicemanager.PrepareToHostSingle(MyService) servicemanager.StartServiceCtrlDispatcher() else: win32serviceutil.HandleCommandLine(MyService) ``` 在该示例代码中,我们定义了一个继承自 `win32serviceutil.ServiceFramework` 的类 `MyService`,并实现了 `SvcDoRun` 和 `SvcStop` 方法来启动和停止服务。然后使用 `win32serviceutil.HandleCommandLine` 方法来处理命令行参数,从而实现将 Python 程序打包成 Windows 服务的功能。 4. 在命令行中以管理员身份运行以下命令来安装服务: ``` python myservice.py install ``` 其中,`myservice.py` 是上一步中编写的 Python 程序文件名。安装成功后,可以在 Windows 的服务列表中看到新安装的服务。 5. 在服务列表中启动、停止或重启服务。也可以使用以下命令来启动或停止服务: ``` net start MyService net stop MyService ``` 其中,`MyService` 是在第三步中定义的服务名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值