Escrevendo arquivos de serviço básicos do systemd

103

Estou desenvolvendo um aplicativo Nodejs com o qual o usuário interage via HTTP no host local. Praticamente não há parâmetros e o daemon praticamente não tem dependências e só precisa estar ativo no tempo de logon.

Eu gostaria de seguir os idiomas em cada plataforma para scripts de inicialização, e isso significa Upstart no Ubuntu e systemd no Fedora.

  • Existem bons tutoriais para escrever arquivos de sistema systemd?
  • Existem 'boas práticas' a serem observadas?

Encontrei estes recursos:

Estou procurando principalmente uma API de tipos como referência, bem como um formato básico a seguir.

beatgammit
fonte
A página da Wiki do Arch Linux sobre systemd tem uma seção interessante sobre como gravar arquivos de serviço.
Rudy Matela
> man systemd.service>> man systemd.unit
truezion

Respostas:

29

Eu começaria com as páginas de manual do Systemd . Eles representam um recurso abrangente do sistema e serviços.

Há também as perguntas frequentes do freedesktop Systemd .

jasonwryan
fonte
43
As páginas de manual serão úteis (eu gostaria que fosse mais limpo), mas existe um tutorial básico sobre arquivos de sistema? Como quais peças são necessárias, quais são recomendadas e quais são opcionais. As páginas de manual parecem assumir que eu já sou especialista em arquivos de sistema systemd, o que não sou.
beatgammit
Não que eu esteja ciente, infelizmente. Provavelmente, existe uma suposição de que, se você estiver escrevendo initscripts, já sabe como escrever initscripts. Olhe através dos scripts de Arco e escolher um que é semelhante ao que você precisa: archlinux.org/packages/community/i686/systemd
jasonwryan
1
Obrigado! Com sua ajuda e o blog que encontrei, consegui trabalhar com um básico. O Systemd parece muito melhor do que o iniciante ou o antigo daemon systemv init.
beatgammit
49
Quem tem tempo lá vive para começar com isso. Quero dizer, se você sabe o que está fazendo, é uma ótima referência, mas, vaca sagrada, as páginas do manual são complexas.
27616 Jonathan Komar #
1
@ macmadness86 O OP estava procurando uma fonte autorizada (veja o último parágrafo); para a maioria das necessidades, ler o arquivo de serviço de um aplicativo semelhante e consultar partes específicas da manpágina será mais que suficiente para chegar lá. Eles são realmente bem diretos.
jasonwryan
180

O exemplo a seguir é inspirado nesse link, que na verdade não menciona todas as etapas e é listado apenas para creditar a fonte: http://patrakov.blogspot.com/2011/01/writing-systemd-service-files.html

Etapa 1 : Criei este arquivo (local da nota) que essencialmente dispara um processo bash com um argumento estendido. Você pode disparar seu próprio comando, que pode ser diferente do bash.

[root@y500-fedora ~]# cat /etc/systemd/system/foo.service 
[Unit]
Description=foo

[Service]
ExecStart=/bin/bash -c "while true; do /bin/inotifywait -qq --event close_write /sys/class/backlight/acpi_video0/brightness; su myusername -c '/bin/xbacklight -display :0 -set $(cat /sys/class/backlight/acpi_video0/brightness)'; done"

[Install]
WantedBy=multi-user.target

Etapa 2 :

Recarregar systemd:

systemctl daemon-reload

Inicie o novo serviço:

systemctl enable foo

(Da mesma forma que você pode disable)

(opcional) Etapa 3 : deve iniciar automaticamente na próxima reinicialização no modo multiusuário (nível de execução 3), mas se você deseja iniciá-lo imediatamente:

systemctl start foo
systemctl status foo # optional, just to verify

Atualização: Para completar, devo acrescentar que o ubuntu bionic parece ter uma página de manual muito completa. RTFM aqui

necromante
fonte
57
Obrigado por postar um tutorial rápido e não apenas vincular a páginas de manual externas!
Tobias J
2
systemctl possui um atalho de comando cat, para referência.
Andy Bettisworth
Qual é o atalho do comando cat? Como uma maneira de criar e editar os arquivos de controle do systemd sem inserir o caminho inteiro?
precisa saber é o seguinte
quais são as permissões que esse arquivo deve ter idealmente?
knocte
2
De acordo com a página de manual systemd.unit, você deve colocá-lo /etc/systemd/system. / usr / lib / systemd é onde os pacotes de distribuição apropriados colocam seus arquivos.
Wbkang 29/05
4

A documentação do Redhat é uma ótima fonte.

caracal
fonte
2
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Stephen Rauch
1
@StephenRauch Eu sei que links simples não são muito bem-vindos, mas esse é um tópico enorme e não é fácil resumir em uma resposta.
caracal
Este foi o guia mais legível que encontrei. Esta é uma boa resposta. :-)
trate bem seus mods
DigitalOcean também tem um conjunto muito abrangente de tutoriais e documentação associada: digitalocean.com/community/tutorials/...
irbanana