当相关的停止后过程被杀死时,过程不会重生

问题描述 投票:1回答:1

我有一个进程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之后,停止后停止睡眠,之后xyz永远不会重生。

如何防止或有任何解决方案?

注意:名称xyz是一个虚拟进程名称,仅用于提及我的实际疑问。

我之前没有使用过upstart脚本。任何帮助都会有更大的帮助。

linux init upstart
1个回答
0
投票

当停止后,开始前和开始后的部分在重生时保持运行时,暴发户可能会感到困惑。

我更喜欢在主作业部分保留任何花费超过几百毫秒的命令,必要时使用辅助作业。

例如,这将停止正在重生或以其他方式停止的作业xyz

start on stopping xyz RESULT='ok'
task
exec sleep 3

这与您的停止后节相同,只是Upstart可以更好地处理简化主作业的状态跟踪。

© www.soinside.com 2019 - 2024. All rights reserved.