Uma solução que encontrei mas não gosto:
- Copie o arquivo de serviço do pacote para um novo nome:
cp /lib/systemd/system/$servicename.service /lib/systemd/system/$servicename-my.service
. - Edite o novo arquivo de serviço: adicione
ExecStartPre=...
ao lado doExecStart
:sed -i "s_^ExecStart=_ExecStartPre=/bin/mkdir -p /var/log/$servicename\nExecStart=_" /lib/systemd/system/$servicename-my.service
- Desative o serviço antigo, ative o novo:
systemctl stop $servicename; systemctl disable $servicename; systemctl enable $servicename-my; systemctl start $servicename-my
.
A principal razão pela qual eu não gosto dessa solução é a necessidade de um arquivo fora de /etc
, que seria considerado "cruft" pelas ferramentas correspondentes.
Além disso, não foi extensivamente testado.
Editar1:
Correção: por documentação, deve ser possível colocar o arquivo de serviço modificado em /etc/systemd/system/
sem renomeá-lo. Vai testar mais tarde.
Outro problema tangencialmente relacionado: PermissionsStartOnly=yes
pode não funcionar corretamente.