Como posso executar um script na inicialização em uma máquina Ubuntu Server 17.10? Acho que o método foi alterado em 17.10.
relate perguntas
-
Subtraindo a mesma coluna entre duas linhas no awk
-
Um script que imprime as linhas de um arquivo com seu comprimento [fechado]
-
exportar variáveis env programaticamente, via stdout do comando [duplicado]
-
Dividir por delimitador e concatenar problema de string
-
MySQL Select com função IN () com array bash
Coloque o script na
cron
tabela do usuário apropriado (ou seja, o crontab ) com um agendamento de@reboot
.Um usuário pode editar sua
cron
tabela comcrontab -e
.Um exemplo que será executado
/path/to/script.sh
na inicialização: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 do root.Veja também: crontab(1), cron(8), crontab(8)
O Ubuntu 15.04 e posteriores, por padrão, usam algo chamado
systemd
, que é um programa (tipo) 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 arquivo barebones
.service
que pode ser usado para iniciar meu servidor python gui (pode ter sido um script de shell, não importa):A
Description
opção é qualquer string 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 a precedência, com base em qual destino deseja usar este serviço. Se você não precisa que seu serviço seja executado em um horário muito específico, basta configurá-lo paramulti-user.target
.Procedimento Básico
Escreva o script que deseja executar na inicialização usando
nano
ou qualquer editor de sua escolha. Certifique-se de incluir o shebang adequado no topo do arquivo (#!/bin/bash
para scripts bash) e dê a ele permissões executáveis comchmod
.Simplesmente escreva seu serviço em um arquivo chamado my_service.service e, em seguida, copie-o no diretório apropriado com
cp my_service.service /lib/systemd/system/
.Inicie seu atendimento:
sudo systemctl start my_service.service
. Isso inicia qualquer script que você disse ao seu serviço para executar. O mesmo comando com "stop" em vez de start irá desligá-lo.Adicione seu serviço ao processo de inicialização:
sudo systemctl enable my_service.service
. Para removê-lo, basta substituir "enable" por "disable" no mesmo comando.E é isso! Lembre-se de que seu script será executado automaticamente com permissões de root, pois isso é padrão nos serviços do systemd.
Meu exemplo simples (completo)
Para referência, aqui está um serviço systemd simples que eu tenho que inicia um servidor Python GUI simples usando o Dash:
Este serviço de exemplo usa um script Python3, mas a fórmula é exatamente a mesma para um script de shell.
Leitura adicional pode ser encontrada neste excelente tutorial da DigitalOcean, e neste tópico AskUbuntu com uma excelente resposta que me ajudou a aprender systemd. Espero que isto ajude!