作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个进程xyz,它的upstart脚本如下
description "Run the xyz daemon"
author "xyz"
import SETTINGS
start on (
start-ap-services SETTINGS
)
stop on (
stop-ap-services SETTINGS
) or stopping system-services
respawn
oom score 0
script
. /usr/share/settings.sh
# directory for data persisted between boots
XYZ_DIR="/var/lib/xyz"
mkdir -p "${XYZ_DIR}"
chown -R xyz:xyz "${XYZ_DIR}"
if [ "${SETTING}" = 1 ]
ARGS="$ARGS --enable_stats=true"
fi
# CAP_NET_BIND_SERVICE, CAP_DAC_OVERRIDE.
exec /sbin/minijail0 -p -c 0x0402 -u xyz -g xyz \
-G /usr/bin/xyz ${ARGS}
else
exec sleep inf
fi
end script
# Prevent the job from respawning too quickly.
post-stop exec sleep 3
现在,由于 OOM 问题。 xyz 根据其 OOM 分数被杀死,并按预期重生。在 xyz 几次重启后,停止后 sleep 被终止,之后 xyz 永远不会重生。
如何避免这种情况或有什么解决方案吗?
注意:名称 xyz 是一个虚拟进程名称,仅用于提及我的实际疑问。
我以前没有处理过 upstart 脚本。任何帮助都会有更大的帮助。
最佳答案
当停止后、开始前和开始后部分在重生期间仍然运行时, Upstart 可能会感到困惑。
我更喜欢将任何超过几百毫秒的命令保留在主要作业部分,必要时使用辅助作业。
例如,这将停止正在重生或停止的作业 xyz
:
start on stopping xyz RESULT='ok'
task
exec sleep 3
这与您的停止后节具有相同的效果,除了 Upstart 可以更好地处理简化主作业的状态跟踪。
关于linux - 当关联的停止后进程被终止时,进程不会重生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002391/
我是一名优秀的程序员,十分优秀!