2

快速提问,

我正在使用 Django 中的 python 脚本从网页启动一个 linux 守护程序(运动)。当我使用以下内容时:

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)运行它,它也会占用端口。这是正常的行为吗?- 为什么启动守护进程会占用那个端口?我可以通过停止开发服务器并尝试重新启动来测试它。

有没有更好的方法来启动这项服务?

干杯,本

4

2 回答 2

0

它似乎在 apache 下工作正常,这是主要的。感谢您的回复。

于 2013-01-08T22:06:17.470 回答
0

p = subprocess.call(['motion', '-c', config_file])是同步调用,这意味着页面加载将被阻止,直到“运动”退出(或 fork-daemonizes 自身。)

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

您可能需要考虑使用 unixstart-stop-daemon实用程序来包装对运动的调用。

于 2013-01-07T03:31:12.973 回答