Como adicionar comandos a serem executados antes de um serviço de sistema controlado pelo systemd?

1

Estou executando o Ubuntu 16.04.

Digamos que eu queira que o sistema execute "mkdir / var / log / servicename " antes de iniciar o serviço (necessário devido a ter / var / log in tmpfs).

Anteriormente, com o upstart, eu editei o conffile / etc / init / servicename para adicionar comandos a ele.

Agora o serviço está sendo executado através do systemd, e o arquivo de configuração do init para ele, / lib / systemd / system / nome_do_serviço é não a conffile , ou seja, se editada, ela será substituída em uma atualização de pacote.

Qual é a maneira recomendada de resolver esse problema?

    
por HoverHell 11.08.2016 / 09:05

1 resposta

0

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 do ExecStart : 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.

    
por HoverHell 11.08.2016 / 09:27