关联的停止后进程被杀死时,进程不会重新生成

时间:2019-01-02 06:55:07

标签: linux init upstart

我有一个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是一个虚拟进程名称,仅用于提及我的实际疑问。

我以前没有编写过新贵的脚本。任何帮助将是更大的帮助。

1 个答案:

答案 0 :(得分:0)

停止后,开始前和开始后部分仍在重生中运行时,Upstart可能会感到困惑。

我宁愿在主作业部分保留任何需要花费几百毫秒以上时间的命令,必要时使用辅助作业。

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

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

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