Como posso executar um script na inicialização em uma máquina Ubuntu Server 17.10? Eu acho que o método foi alterado em 17.10.
fonte
Como posso executar um script na inicialização em uma máquina Ubuntu Server 17.10? Eu acho que o método foi alterado em 17.10.
Coloque o script na cron
tabela do usuário apropriado (ou seja, o crontab ) com uma programação de @reboot
.
Um usuário pode editar sua cron
tabela com crontab -e
.
Um exemplo que será executado /path/to/script.sh
na inicialização:
@reboot /path/to/script.sh
Se você precisar executá-lo como root, não use @reboot sudo /path/to/script.sh
;
use sudo crontab -eu root
para editar o crontab da raiz.
Veja também: crontab (1), cron (8), crontab (8)
O Ubuntu 15.04 e o encaminhamento por padrão usam algo chamado systemd
, que é um programa que automatiza serviços e procedimentos de inicialização. Você pode criar o seu próprio e adicioná-lo à lista de serviços de inicialização com apenas um pouco de esforço.
Serviço Systemd básico
Este é um .service
arquivo barebones que pode ser usado para iniciar meu servidor python gui (poderia ter sido um script de shell, não importa):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
A Description
opção é qualquer sequência que descreva o que o serviço é ou faz.
A ExecStart
opção especifica o comando a ser executado. Aqui, dou um caminho para um script python executável e uso o &
token para executá-lo em segundo plano.
A WantedBy
opção especifica precedência, com base em qual destino deseja usar este serviço. Se você não precisar que seu serviço seja executado em um horário muito específico, basta configurá-lo para multi-user.target
.
Procedimento básico
Escreva o script que você deseja executar na inicialização usando nano
ou qualquer editor de sua escolha. Certifique-se de incluir o shebang adequado na parte superior do arquivo ( #!/bin/bash
para scripts bash) e conceda permissões executáveis com chmod
.
Simplesmente escreva seu serviço em um arquivo chamado my_service.service e copie-o no diretório apropriado com cp my_service.service /lib/systemd/system/
.
Comece o seu serviço: sudo systemctl start my_service.service
. Isso inicia qualquer script que você disse ao seu serviço para executar. O mesmo comando com "parar" em vez de iniciar o desativará.
Adicione o seu serviço para o processo de start-up: sudo systemctl enable my_service.service
. Para removê-lo, basta substituir "ativar" por "desativar" no mesmo comando.
E é isso! Lembre-se de que seu script será executado automaticamente com permissões de root, como padrão nos serviços systemd.
Meu exemplo simples (completo)
Para referência, aqui está um serviço systemd simples que tenho que inicia um simples servidor GUI do Python usando o Dash:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
Este serviço de exemplo usa um script Python3, mas a fórmula é exatamente a mesma para um script de shell.
Outras leituras podem ser encontradas neste excelente tutorial da DigitalOcean, e neste tópico do AskUbuntu com uma excelente resposta que me ajudou a aprender o systemd. Espero que isto ajude!