Como usar
- Informe o nome do serviço, o comando com o caminho completo e o diretório de trabalho.
- Defina o usuário, a política de reinício e as variáveis de ambiente.
- Se quiser, adicione a proteção básica ou um agendamento (OnCalendar) para criar um timer.
- 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.