我有一个xyz进程,其启动脚本如下所示
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几次重新启动后,停止后的睡眠将被杀死,之后,xyz将不会重新产生。
如何防止这种情况发生?或者有什么解决办法?
注意:名称xyz是一个虚拟进程名称,仅用于提及我的实际疑问。
我以前没有编写过新贵的脚本。任何帮助将是更大的帮助。
答案 0 :(得分:0)
停止后,开始前和开始后部分仍在重生中运行时,Upstart可能会感到困惑。
我宁愿在主作业部分保留任何需要花费几百毫秒以上时间的命令,必要时使用辅助作业。
例如,这将使正在重生或以其他方式停止的作业xyz
停顿:
start on stopping xyz RESULT='ok'
task
exec sleep 3
这与停止后节具有相同的效果,只是Upstart可以更好地处理简化的主要作业的状态跟踪。