Pular para o conteúdo
ToolMug

Gerador de arquivo de serviço systemd

Mantenha um programa Node.js, Python ou Go rodando em um servidor Linux, inicie-o no boot e reinicie-o quando travar — sem precisar lembrar de todas as opções do systemd. Preencha o comando e o usuário, escolha uma política de reinício e as variáveis de ambiente, e copie o arquivo .service junto com os comandos para instalá-lo e iniciá-lo. Marque Executar em um agendamento (criar um .timer) para obter um .timer como alternativa moderna ao cron.

Roda no seu navegador — nada do que você digita é enviado

Vira o nome do arquivo, ex.: myapp → myapp.service

Use o caminho completo do programa, ex.: /usr/bin/python3 app.py

O comando continua rodando em primeiro plano (a maioria dos apps web e scripts).

Uma CHAVE=valor por linha; valores com espaços recebem aspas automaticamente.

0 mantém o padrão do sistema.

myapp.service

Instalar e iniciar

Cole os comandos no servidor como root. Depois de editar um arquivo de unidade, execute systemctl daemon-reload novamente. Logs: journalctl -u <name>.

Como usar

  1. Informe o nome do serviço, o comando com o caminho completo e o diretório de trabalho.
  2. Defina o usuário, a política de reinício e as variáveis de ambiente.
  3. Se quiser, adicione a proteção básica ou um agendamento (OnCalendar) para criar um timer.
  4. Copie os arquivos gerados ou cole os comandos de instalação em um shell root no servidor.

Opções explicadas

Type
simple serve para programas que ficam em primeiro plano; oneshot serve para scripts que rodam uma vez, como tarefas agendadas.
Restart
Em caso de falha reinicia o serviço quando ele termina com erro ou trava; Sempre também o reinicia após uma saída normal.
OnCalendar
Quando o timer dispara, ex.: daily ou *-*-* 03:00:00 para as 3 da manhã todos os dias. Teste as expressões com systemd-analyze calendar.

Exemplo: uma tarefa noturna como timer

Para executar um script toda noite às 3h, defina o Comando (ExecStart) como /usr/local/bin/backup.sh, o nome do serviço como backup, Type como oneshot e Restart como Nunca, depois marque «Executar em um agendamento (criar um .timer)» e «Proteção básica». Com o usuário e o diretório de trabalho padrão, o gerador produz dois arquivos. backup.service:

[Unit]
Description=Nightly backup

[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only

e backup.timer:

[Unit]
Description=Run backup on a schedule

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service

[Install]
WantedBy=timers.target

Duas coisas mudam quando um timer está ativado. O arquivo de serviço perde a seção [Install], porque o timer é quem o inicia, e os comandos de instalação habilitam o timer em vez do serviço:

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f

O Type não é alterado por você quando marca a opção do timer, então escolha oneshot por conta própria para tarefas que terminam. Um serviço oneshot combinado com Restart Sempre não é válido, então o gerador omite o Restart e mostra um aviso.

Perguntas frequentes

Onde coloco o arquivo?

Em /etc/systemd/system/. Depois execute systemctl daemon-reload e systemctl enable --now <name>.service — os comandos gerados fazem tudo isso.

Por que o meu serviço falha com “Executable path is not absolute”?

Versões antigas do systemd exigem o caminho completo do programa em ExecStart. Encontre-o com which, ex.: which node.

Timer ou cron?

Os timers registram no journal, podem recuperar execuções perdidas enquanto o servidor estava desligado e nunca rodam duas vezes ao mesmo tempo. O cron é mais simples para comandos de uma linha e continua funcionando bem.

Privacidade

Esta ferramenta funciona inteiramente no seu navegador. Seus arquivos e textos são processados no seu dispositivo e nunca são enviados aos nossos servidores.

Ferramentas relacionadas