Como posso executar o script bash em segundo plano?

Oct 24 2020

Estou aprendendo script bash e acabei de fazer um pequeno projeto para me notificar (com notificar-enviar) quando minha bateria estiver fraca ou carregada.

Eu gostaria de algumas sugestões de como posso executar este script sem mostrar o terminal. Minha ideia é adicioná-lo no software "Startup Applications" para rodar quando eu inicializar o sistema, mas não quero mostrar o terminal, apenas rodar em background.

Respostas

1 kanehekili Oct 24 2020 at 20:57

Você pode configurar um serviço systemd.

Você pode criar um arquivo (como sudo) com seu editor favorito (nano, vim etc) como:

sudo nano /etc/systemd/system/myexecuteable.service

Deve conter pelo menos o seguinte:

[Unit]
Description=start my executable after multi-user target

[Service]
Type=simple
ExecStart=/path/to/my/executable

[Install]
WantedBy=multi-user.target

Para garantir que o serviço será iniciado após a reinicialização, execute: sudo systemctl enable myexecutable.service

Esse serviço será executado continuamente se o bash tiver algum tipo de loop. Se esse executável tiver alguma saída (use "logger para isso em um arquivo bash), você pode verificá-lo a qualquer momento usandojournalctl -u myexecutable.service

1 Seamus Oct 24 2020 at 23:32

Um script pode ser executado em segundo plano a partir da linha de comando como este:

$ ./myscript.sh &

Em outras palavras, anexe &ao comando.

Você disse que deseja executar este script "sem mostrar o terminal". Acho que existem duas maneiras de fazer isso:

  1. criar um systemdserviço - como nesta resposta

  2. inicie o script como um crontrabalho quando o sistema for inicializado:

Para configurar um crontrabalho, você precisará criar uma nova crontabentrada.

Para fazer isso, abra um terminal e digite o seguinte comando:

$ crontab -e

Isso abrirá seu crontabem um editor ( nanoé uma boa escolha para editor). Quando você estiver no editor, adicione a seguinte linha ao final do arquivo:

@reboot /home/user/myscript.sh & >> /home/user/myscript.log 2>&1 

Onde /home/user/myscript.shestá o caminho completo para seu arquivo de script. Qualquer saída do seu script será redirecionada para o arquivo em /home/user/myscript.log. Certifique-se de verificar se há mensagens de erro neste arquivo de log.

Salve o arquivo ( ^ o) se estiver usando nanoe saia do editor ( ^ x).

Algumas coisas para lembrar:

  1. Certifique-se de que myscript.shé executável .

  2. Se você usar qualquer comando no myscript.sh, certifique-se de que o sistema saiba onde encontrá-los - ou seja, use um caminho completo para o comando ou declare um PATH em seu script.

Deixe-nos saber se você tiver mais perguntas (postar um comentário) e nós tentaremos ajudar.