Служба Systemd не работает с чтением FIFO

Найдите в /etc/nginx/nginx.confдирективу rootи измените ее там.

-2
25.09.2017, 14:29
1 ответ

Там столько всего неправильного.

  • Не рассматривайте ExecStartи ExecStopкак командные строки оболочки. Они не. Руководство systemd предупреждает об этом. Расширения оболочки, такие как подстановка команд, недоступны в этих настройках файла сервисного модуля. Это , а не язык оболочки.
  • Не создавайте файловый механизм PID, если место, с которого вы начинаете, имеет под рукой фактический диспетчер служб. Файлы PID — это механизм, о котором мы знаем, что он сломан с 1980-х годов, и что надлежащее управление службами полностью избавляет от необходимости. У вас есть сервис-менеджер. Это гарантирует, что в любой момент времени будет запущен не более одного экземпляра службы. Он будет отслеживать идентификатор процесса. Он будет иметь дело с отправкой сигналов завершения в процесс службы, когда служба закрывается.
  • Не включайте в серверный процесс базовые -элементы серверной стороны, такие как создание FIFO и открытие его серверной части.

Делай так:

  • Создайте блок розеток, который будет располагаться рядом с сервисным блоком.
  • Убрать всю явную обработку FIFO из crashCollector.
  • Используйте ListenFIFOв гнездовом блоке. Конечно, для этого потребуется абсолютный путь.
  • Используйте StandardInput=socketв сервисном блоке.
  • Сделайте так, чтобы ваш crashcollectorскрипт просто читал со стандартного ввода.
  • Извлеките весь файл PID из crashCollector.
  • Удалите все перехваты сигналов и cleanup()прочее из crashCollector.
  • Исключите все явные убийства с помощью ExecStopи последующую махинацию, которую вы пытались совершить с помощью KillMode, из служебного подразделения.
  • Используйте StandardError=journalв сервисном блоке.
  • Замените logпростым echo 1>&2на стандартную ошибку.

Дополнительная литература

3
28.01.2020, 05:16

Теги

Похожие вопросы