gpt4 book ai didi

python - Ubuntu upstart 将在启动/停止/等时挂起

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:09 25 4
gpt4 key购买 nike

我在 Ubuntu 上有几个服务将开始使用“upstart”。它们按要求工作,但当我使用“停止/启动/重新启动 {myservice}”时,它会挂起(但会按要求执行)。

我知道这与 fork 有关。

我的服务是 python 脚本,它会在启动时创建新线程。一个脚本将创建 1 个新线程(并将继续在主线程上运行),第二个脚本将创建 2 个新线程并将继续在主线程上运行,第三个脚本将不创建新线程。

全部卡在命令上。

在/etc/init 中都使用相同的代码如下:

description "my service"
version "1.0"
author "my name, 2013"

expect fork

start on runlevel [2345]
stop on runlevel [!2345]
respawn


chdir <to script dir>

exec /usr/bin/python ./scriptname/

您认为可能是什么问题? “fork”与创建新线程有什么关系吗?

最佳答案

我认为您混淆了在 Python 中创建线程与 Linux 分支。 Python 将在运行时管理自己的线程(假设您使用的是常规构造),从新手的角度来看,它仅监视您已启动的正在运行的 python 进程 - python 应该设置为管理自己的子进程。

可能的解决方案1

尝试完全删除 expect 子句,然后重新启动(您必须重新启动,因为 upstart 可能正在跟踪一个不存在的 PID)。

当 upstart 由于不正确的 expect 而跟踪一个不存在的 PID 时,我看到这个启动/停止挂起,这是通过删除 expect 并重新启动来解决的。您可以通过执行 status myservice 来诊断此问题,upstart 将报告已停止以及 PID。 (对于无法重启的其他用户,您也可以使用 this script )

可能的解决方案2

使用 exec su root -c "/usr/bin/python ./scriptname/" 设置用户(或其他用户)可以解决 python/您的程序试图访问的问题仅对特定用户存在的环境变量(默认情况下,upstart 具有非常少的环境变量集)

注意事项

您应该尝试查看输出以帮助您进行调试。在现实生活中,您可能会通过管道传输到 logger,但是将您的脚本修改为类似 /usr/bin/python ./scriptname/>>/home/myuser/output.log 2>&1 然后查看内容将暂时帮助您。

关于python - Ubuntu upstart 将在启动/停止/等时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19561587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com