从Python启动Linux守护进程

从Python启动Linux守护进程,python,django,linux,Python,Django,Linux,快速提问 我正在使用Django中的python脚本从网页启动linux守护进程(motion)。当我使用以下命令时: def restartRecord(): #restart the service config_file = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'recorder/config/motion.conf') p = subprocess.call(['motion', '-c

快速提问

我正在使用Django中的python脚本从网页启动linux守护进程(motion)。当我使用以下命令时:

def restartRecord():
    #restart the service
    config_file = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'recorder/config/motion.conf')
    p = subprocess.call(['motion', '-c', config_file])
    return True
它启动守护进程没有问题,但是如果我从django开发服务器(端口8000)运行它,它也会连接端口。这是正常的行为吗为什么启动守护进程会占用该端口?我可以通过停止开发服务器并尝试再次启动来测试这一点

是否有更好的方式启动此服务

干杯, Ben

p=subprocess.call(['motion','-c',config_file])
是一个同步调用,这意味着页面加载将被阻止,直到“motion”退出(或fork守护进程本身)

Django开发服务器是单线程的,因此在等待此请求成功时不会提供任何其他请求


你可能想考虑使用UNIX <代码>开始停止守护程序> /Cult>实用程序来将调用封装到动作。

< p>在APACHE中它看起来很好,这是主要的事情。感谢您的回复。

子进程继承文件描述符,其中包括网络连接。正确的守护程序将关闭从父级继承的所有文件描述符。您的守护进程可能没有。在运动配置中,它被设置为作为守护进程运行。我似乎不知道如何使用自定义的运动配置文件(即传递参数)进行启动-停止。有什么想法吗?