Как добавить команды для запуска перед системной службой, управляемой systemd?

Я бегу Ubuntu 16.04.

Допустим, я хочу, чтобы система запустила "mkdir / var / log / servicename " перед запуском службы (необходимо из-за наличия / var / log в tmpfs).

Ранее при помощи upstart я редактировал файл conffile / etc / init / servicename, чтобы добавить к нему команды.

Теперь служба запускается через systemd, и файл конфигурации init для нее, / lib / systemd / system / servicename, не является conffile, т. Е. При редактировании он будет заменен при обновлении пакета.

Каков рекомендуемый способ решения этой проблемы?

1 ответ

Одно решение, которое я нашел, но мне не очень понравилось:

  • Скопируйте файл сервиса пакета под новым именем: cp /lib/systemd/system/$servicename.service /lib/systemd/system/$servicename-my.service,
  • Отредактируйте новый файл сервиса: добавьте ExecStartPre=... сразу после ExecStart: sed -i "s_^ExecStart=_ExecStartPre=/bin/mkdir -p /var/log/$servicename\nExecStart=_" /lib/systemd/system/$servicename-my.service
  • Отключите старый сервис, включите новый: systemctl stop $servicename; systemctl disable $servicename; systemctl enable $servicename-my; systemctl start $servicename-my,

Основной причиной, по которой мне не нравится это решение, является необходимость файла за пределами /etc, что будет считаться "бесполезным" соответствующими инструментами.

Кроме того, не всесторонне проверено.

Edit1:

Исправление: согласно документации должно быть возможно поместить измененный сервисный файл в /etc/systemd/system/ без переименования. Позже опробую.

Еще одна тангенциально связанная проблема: PermissionsStartOnly=yes может работать неправильно

Другие вопросы по тегам