gpt4 book ai didi

python - 为什么 python 调用 sys.exit 时 upstart 服务不会停止

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

我使用 Upstart 脚本将 Python 应用程序设置为 Linux 服务。

description "AAE client app"

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

respawn

env PATH=/home/ec2-user/aae_client/env/bin
env PROGRAM_NAME="aae"
env USERNAME="ec2-user"

# Main script to be run
script
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Ready to run..." >> /var/log/$PROGRAM_NAME.sys.log

export HOME="/home/ec2-user"
echo $$ > /var/run/$PROGRAM_NAME.pid

cd /home/ec2-user/aae_client
exec python -m app.run >> /var/log/$PROGRAM_NAME.sys.log 2>&1
end script

由于捕获到某些异常,我想在 python 代码中调用 sys.exit 时停止服务。

if not config_path:
logger.error('Environment variable AAE_CLIENT_CONFIG_PATH is not set')
sys.exit()

事实证明,sys.exit 确实终止了当前进程,但不知何故服务一直在重新生成。如果我一次又一次地运行 status [service],它会显示每次运行的服务都有一个新的 PID。

有没有办法在代码中完全终止服务?

最佳答案

简短的回答是它会在进程退出时重新生成进程,因为这是您告诉它要做的。这就是 respawn 指令的用途。

如果你想重生但不是立即重生,你可以添加一个停止后延迟。

"Delay Respawn of a Job" section of the Upstart Cookbook给出这个例子:

respawn
exec mydaemon
post-stop exec sleep 10

您可以将 sleep 修改为适合您的服务的任何内容。

关于python - 为什么 python 调用 sys.exit 时 upstart 服务不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51868926/

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