为什么 Python 调用 sys.exit 时 upstart 服务不会停止
Why upstart service does not stop when sys.exit is called by Python
我使用 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]
,它会显示服务 运行ning 每次都有一个新的 PID。
有没有办法在代码中完全终止服务?
简短的回答是它会在退出时重新生成进程,因为这是您告诉它要做的。这就是 respawn
指令的用途。
如果你想重生但不是立即重生,你可以添加一个post-停止延迟。
"Delay Respawn of a Job" section of the Upstart Cookbook给出了这个例子:
respawn
exec mydaemon
post-stop exec sleep 10
您可以将睡眠修改为适合您的服务的任何值。
我使用 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]
,它会显示服务 运行ning 每次都有一个新的 PID。
有没有办法在代码中完全终止服务?
简短的回答是它会在退出时重新生成进程,因为这是您告诉它要做的。这就是 respawn
指令的用途。
如果你想重生但不是立即重生,你可以添加一个post-停止延迟。
"Delay Respawn of a Job" section of the Upstart Cookbook给出了这个例子:
respawn
exec mydaemon
post-stop exec sleep 10
您可以将睡眠修改为适合您的服务的任何值。