Процесс не возрождается, когда связанный пост-остановочный процесс убит - PullRequest
0 голосов
/ 02 января 2019

У меня есть процесс 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 голосов
/ 26 апреля 2019

Upstart может запутаться, когда разделы post-stop, pre-start и post-start продолжают работать на респаунах.

Я предпочитаю сохранять любую команду, которая занимает более нескольких сотен миллисекунд, в главном разделе заданий, при необходимости используя вспомогательные задания.

Например, это остановит задание xyz, которое было вызвано или иным образом остановлено:

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

Это имеет тот же эффект, что и ваша строфа после остановки, за исключением того, что Upstart может лучше обрабатывать отслеживание состояний для упрощенной основной работы.

...