Я выполняю человечность 16.04.
Скажем, я хочу, чтобы система работала "mkdir/var/log/servicename" прежде, чем запуститься, сервис (нуждался из-за наличия/var/log в tmpfs).
Ранее, с выскочкой, я отредактировал conffile/etc/init/servicename для добавления команд к нему.
Теперь сервис пробегается systemd, и init файл конфигурации для него,/lib/systemd/system/servicename не является conffile, т.е., если отредактировано он будет заменен на обновлении пакета.
Что рекомендуемый путь состоит в том, чтобы решить эту проблему?
Одно решение, которое я нашел, но действительно не люблю:
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
не мог бы работать правильно.