Frequentemente vejo a necessidade de criar algum programa ou script que precisa estar sempre rodando na máquina, e também quando o computador é reiniciado.
Existem algumas ferramentas para resolver esse trabalho, mas sempre considere usar soluções embutidas em seu sistema operacional primeiro.
É muito fácil criar um serviço Linux, você pode criar um serviço que rode qualquer script ou programa em qualquer linguagem de programação, e tornar esse sistema persistente e resiliente como um serviço em sua máquina.
Nesse artigo vamos usar o systemd para gerenciar nosso serviço, ele está presente na maioria das distribuições linux como Ubuntu, Debian, OpenSuse…
Criando o Programa
Vamos criar uma aplicação web simples em NodeJs de exemplo. Ele vai escutar na porta 9999
e retornar a data atual.
const http = require('http');
http.createServer(function (req, res) {
res.write(new Date().toString());
res.end();
}).listen(9999);
Vamos testar, no navegador entre em http://localhost:9999
.
Agora que validamos que nosso programa funciona, vamos fazer com que ele rode sempre, se por algum motivo ele parar de funcionar deve ser restartado e caso a máquina seja reiniciada o serviço precisa iniciar também.
Criando o Serviço
Chamerei nosso serviço de webdate
, com o seu editor de terminal preferido cria um arquivo no caminho /etc/systemd/system/webdate.service
.
[Unit]
Description=WebDate - Serviço Web de Data
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=centos
ExecStart=/usr/bin/node /caminho/arquivo.js
[Install]
WantedBy=multi-user.target
Você precisará alterar as seguintes variáveis:
User=
: Coloquei o seu usuário atual, ele será o usuário que executará o serviçoExecStart=
: Esse é o caminho para o script que será executado, você precisa fornecer primeiro o caminho completo para a linha de comando no, normalmente,/usr/bin/node
e em seguida o caminho completo para o seu arquivo.
Agora para iniciar o nosso serviço basta executar o seguinte comando:
systemctl start webdate
Para habilitar a inicialização automática quando o sistema é ligado:
systemctl enable webdate
Pronto, agora seu serviço já está executando e configurado para reiniciar em caso de falha e iniciar automaticamente junto com o sistema. Para parar o serviço basta executar o seguinte comando:
systemctl stop webdate
Olá tudo bem?
como faço um script rodar ao desligar.
Quero que ele(script) execute assim que o usuário clicar no botão de desligar e depois desligar normalmente.
Sistema operacional: Linux mint 20
Não sei ao certo, mas acho que o linux mint usa systemd tb, se esse for o caso você pode criar o script em /usr/lib/systemd/system-shutdown/ e o serviço assim:
Bom dia, Henrique.
Realizei o procedimento. mas não deu certo, o que posso fazer?
Antes estava assim:
o script é somente a criação de um log.txt.
Pasta do script: /opt/desligar/desligar.sh
Pasta do serviço: /etc/systemd/system/desliga.service
Conforme você falou, realizei o procedimento.
Criei o script e deixei na pasta: /usr/lib/systemd/system-shutdown/
e o serviço deixei em /etc/systemd/system/desliga.service
Com o conteúdo:
[Unit]
Description=Executar no shutdown
Requires=network.target
DefaultDependencies=no
Before=shutdown.target reboot.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/usr/lib/systemd/system-shutdown/desligar.sh
[Install]
WantedBy=multi-user.target