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.


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 .


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


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.