当前位置: 首页 > 面试题库 >

如何使Python脚本作为服务运行?

纪翰
2023-03-14
问题内容

我想在CENTOS服务器中运行python脚本:

#!/usr/bin/env python
import socket
try:    
    import thread 
except ImportError:
    import _thread as thread #Py3K changed it.
class Polserv(object):
    def __init__(self):
        self.numthreads = 0
        self.tidcount   = 0
        self.port       = 843
        self.sock       = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.sock.bind(('100.100.100.100', self.port))
        self.sock.listen(5)
    def run(self):
        while True:
            thread.start_new_thread(self.handle, self.sock.accept()) 
    def handle(self,conn,addr):
        self.numthreads += 1
        self.tidcount   += 1
        tid=self.tidcount
        while True:
            data=conn.recv(2048)
            if not data:
                conn.close()
                self.numthreads-=1
                break
            #if "<policy-file-request/>\0" in data:
            conn.sendall(b"<?xml version='1.0'?><cross-domain-policy><allow-access-from domain='*' to-ports='*'/></cross-domain-policy>")
            conn.close()
            self.numthreads-=1
            break
        #conn.sendall(b"[#%d (%d running)] %s" % (tid,self.numthreads,data) )
Polserv().run()

我正在使用$ python flashpolicyd.py它,并且工作正常…问题是:即使关闭ssh控制台后,如何保持此脚本运行?


问题答案:

我使用此代码来守护我的应用程序。它允许您start/stop/restart使用以下命令来编写脚本。

python myscript.py start
python myscript.py stop
python myscript.py restart

除此之外,我还有一个init.d脚本来控制我的服务。这使您可以在操作系统启动时自动启动服务。

这是一个简单的示例,可以助您一臂之力。只需将代码移到一个类中,然后从run内部的函数中调用它即可MyDeamon

import sys
import time

from daemon import Daemon


class YourCode(object):
    def run(self):
        while True:
            time.sleep(1)


class MyDaemon(Daemon):
    def run(self):
        # Or simply merge your code with MyDaemon.
        your_code = YourCode()
        your_code.run()


if __name__ == "__main__":
    daemon = MyDaemon('/tmp/daemon-example.pid')
    if len(sys.argv) == 2:
        if 'start' == sys.argv[1]:
            daemon.start()
        elif 'stop' == sys.argv[1]:
            daemon.stop()
        elif 'restart' == sys.argv[1]:
            daemon.restart()
        else:
            print "Unknown command"
            sys.exit(2)
        sys.exit(0)
    else:
        print "usage: %s start|stop|restart" % sys.argv[0]
        sys.exit(2)

暴发户

如果您正在运行使用Upstart的操作系统(例如CentOS
6)-您也可以使用Upstart来管理服务。如果您使用Upstart,则可以按原样保留脚本,只需在下面添加如下内容/etc/init/my- service.conf

start on started sshd
stop on runlevel [!2345]

exec /usr/bin/python /opt/my_service.py
respawn

然后,您可以使用启动/停止/重新启动来管理服务。

例如

start my-service
stop my-service
restart my-service

这里提供了使用新贵的更详细的示例。



 类似资料:
  • 问题内容: 我正在草拟一组程序的体系结构,这些程序共享存储在数据库中的各种相互关联的对象。我希望其中一个程序充当服务,为这些对象的操作提供更高级别的接口,而其他程序则通过该服务访问对象。 我目前的目标是将Python和Django框架作为实现该服务的技术。我很确定自己知道如何守护Linux中的Python程序。但是,这是系统应支持Windows的可选规格。我几乎没有Windows编程经验,也没有W

  • 问题内容: 是否可以在网络服务器上将Python脚本作为后台服务运行?我想这样做以进行套接字通信。 问题答案: 您可以使其成为守护程序。有一个PEP可以提供更完整的解决方案,但是我发现这样做很好。

  • 问题内容: 我刚刚开始学习Python,现在我很迷路。我想在通过hosting24.com托管的服务器上运行脚本。他们的常见问题解答说他们支持Python,但是我不知道将脚本放在哪里运行。 我的根目录中有一个名为cgi-bin的文件夹,我猜这是我放置脚本的位置吗?有人可以向我解释这是如何工作的吗? 问题答案: 很简单,您可以将Python脚本重命名为“ pythonscript.cgi”。将其发布

  • 问题内容: 哈o 我试图让python脚本在(ubuntu)linux上作为服务(守护程序)运行。 在网络上,存在几种解决方案,例如: http://pypi.python.org/pypi/python- daemon/ 行为规范的Unix守护进程很难正确执行,但是每个守护程序所需的步骤几乎相同。DaemonContext实例保存程序的行为和配置的进程环境。使用实例作为上下文管理器进入守护程序状

  • 问题内容: 我有一个非常简单的Python文件python1.py,其内容为: 我希望从JavaScript执行此操作,如下所示: 但是,所有发生的是,我得到了警告,向我显示了Python脚本的内容。没有创建文件C:\ Temp \ test.txt,因此很明显,Python未执行。 我如何说服代码执行Python脚本,而不仅仅是阅读它? 问题答案: 您是否可以直接从浏览器执行脚本。与jquery

  • 问题内容: 我正在调试一些必须在我的虚拟机上运行的python脚本。而且,我更喜欢在本地(虚拟机外部)编辑脚本。因此,我发现每次都将脚本修改为虚拟机 很繁琐。谁能提出一些有效的方法? 特别是,我想知道是否可以在远程PVM上执行python脚本。像这样: 问题答案: 可以使用ssh。Python接受连字符(-)作为执行标准输入的参数, 运行 python –help 以获得更多信息。