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

Я выполняю человечность 16.04.

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

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

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

Что рекомендуемый путь состоит в том, чтобы решить эту проблему?

1
задан 11 August 2016 в 10:05

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, который считали бы “cruft” соответствующие инструменты.

кроме того, не экстенсивно протестированный.

Edit1:

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

Другая мимоходом связанная проблема: PermissionsStartOnly=yes не мог бы работать правильно.

0
ответ дан 8 December 2019 в 09:30

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

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