Como fazer isso com o Systemd (é mais fácil)
Agora que as variantes do Ubuntu e o Mint foram para o systemd, achei minhas soluções antigas com base no exposto menos satisfatórias. Pesquisei na web para descobrir como fazer isso com o systemd e acabei combinando a sabedoria de outras pessoas e documentando-a como uma postagem de blog em blogspot.com.au contendo o seguinte tutorial.
Com o systemd, você cria um ou dois arquivos para chamar seus scripts usando os modelos abaixo e executa alguns comandos. Simples.
Versão da GUI
Primeiro, crie os scripts que você deseja executar na inicialização e / ou desligamento. Basta fazer um se você não precisar de ambos. Criei .scopening_atstart e .scfullcopy_atend.
Em seguida, verifique se eles são executáveis clicando com o botão direito do mouse no arquivo, selecionando propriedades e certificando-se de que, em permissões, você tenha marcado Permitir a execução de arquivo como um programa.
Os dois arquivos que eu criei preenchem e salvam o conteúdo de um ramdisk. Eles também criam um arquivo no meu diretório pessoal para provar que o serviço está funcionando. Eles tinham a forma:
#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time
Em seguida , abri meu gerenciador de arquivos como root, abri /etc/systemd/system
e criei um arquivo startup.service e um arquivo save-ramdisk.service. Obviamente, você pode escolher seus próprios nomes e nomes genéricos poderiam incluir um arquivo de inicialização chamado johns_start.service e um arquivo de desligamento chamado johns_shutdown.service. Apenas não escolha nomes de serviço existentes.
[Unit]
Description=Startup Applications
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart
[Install]
WantedBy=multi-user.target
e
[Unit]
Description=Save Ramdisk to Wine drive C
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend
[Install]
WantedBy=multi-user.target
Você pode usar os mesmos arquivos de serviço, substituindo o caminho completo do seu script executável pelo meu.
Finalmente, para cada um, execute o comando systemctl enable your_files_name (mas sem o serviço de sufixo). Então meu primeiro foisystemctl enable startup
Reinicie o computador uma vez para iniciar os serviços. O serviço de início será executado sempre que o systemd entrar no destino de multiusuários e o serviço de parada quando sair do destino de multiusuários. Arquivos de serviço alternativos com diferentes condições de ativação serão descritos abaixo.
Comandos úteis adicionais incluem:
systemctl é inicialização ativada
systemctl é inicialização ativada
systemctl reiniciar inicialização
Mais pode ser encontrado na referência acima.
Versão CLI (linha de comando)
Esta descrição supõe que você opere no diretório inicial em vez de em / home / john, use o sudo conforme necessário e sua escolha do editor em que escrevo vim ou svim.
Crie scripts de shell de inicialização e desligamento com a primeira linha #!/bin/sh
e torne-os executáveis usando chmod +x my_new_filename
.
Crie dois arquivos como acima, ou neste exemplo, um arquivo para lidar com tarefas de inicialização e desligamento. Vou executar scripts no meu diretório pessoal, mas o @don_crissti mostra algumas alternativas no Stack Exchange .
svim /etc/systemd/system/start_and_stop.service
e copie o conteúdo do arquivo:
[Unit]
Description=Run Scripts at Start and Stop
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands #your paths and filenames
ExecStop=/home/john/.shutdown_commands
[Install]
WantedBy=multi-user.target
Em seguida, ativar o serviço com o comando:
systemctl enable start_and_stop
e reinicie o sistema após o qual os serviços estarão ativos. Os comandos systemctl is-enabled start_and_stop
e systemctl is-active start_and_stop
podem ser usados no monitoramento de seus novos serviços.
Alterando as condições do acionador para desligamento
Os arquivos acima de tudo usam a abertura ou o fechamento do ambiente multiusuário para iniciar a execução dos scripts. O arquivo abaixo usa o início de quatro possíveis processos de desligamento para iniciar seus scripts. Adicionar ou remover os destinos na linha Antes + na linha WantedBy permitirá fazer distinções mais refinadas:
Este arquivo foi proposto na segunda resposta desta postagem, mas não consegui executá-lo até que eu adicionei uma seção Instalação.
Novamente, edite o script /etc/systemd/service/
e ative-o usando systemctl enable your_file_name
. Quando alterei os destinos, usei o systemclt disable file_name
comando e o reativei, que o vinculou aos diretórios de destino. Reinicialize e o serviço estará operando.
[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/home/john/.my_script #your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target