Как добавить команды для запуска перед системной службой, управляемой 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
может работать неправильно