Eu tenho uma máquina executando algumas VMs vagantes. O problema que tenho é que às vezes esqueço de desligar a VM antes de desligar ou reiniciar minha máquina. Por isso, minha máquina ficou presa com esta mensagem:waiting for vboxnet0 to become free
Pesquisei sobre soluções e encontrei esta página:
http://en.kioskea.net/faq/3348-ubuntu-executing-a-script-at-startup-and-shutdown
Eu tentei o que eles para o desligamento, mas não funciona.
Eu escrevi um arquivo sh para esse comando:
#!/bin/bash
cd ~/workspace/git/mediaservice
vagrant halt
alguma sugestão?
shutdown
reboot
execute-command
SERPRO
fonte
fonte
Respostas:
Se suas VMs vagrantes estiverem usando o VirtualBox, você poderá modificar / etc / default / virtualbox e alterar a linha que diz:
SHUTDOWN_USERS=""
para
SHUTDOWN_USERS="all"
Isso foi corrigido para mim no Ubuntu 14.04
fonte
SHUTDOWN_USERS=`cut -d: -f1 /etc/passwd`
vez deSHUTDOWN_USERS="all"
/etc/default/virtualbox
arquivo ...Para executar um script no desligamento ou reinicialização:
sudo chmod +x K99_script
Notas:
fonte
fonte
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:
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.e
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 foi
systemctl 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 usandochmod +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 .
e copie o conteúdo do arquivo:
Em seguida, ativar o serviço com o comando:
e reinicie o sistema após o qual os serviços estarão ativos. Os comandos
systemctl is-enabled start_and_stop
esystemctl 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 usandosystemctl enable your_file_name
. Quando alterei os destinos, usei osystemclt disable file_name
comando e o reativei, que o vinculou aos diretórios de destino. Reinicialize e o serviço estará operando.fonte
Crie um arquivo executável do shell com seu script no diretório /etc/init.d/.
Como isso precisa ser executado durante o desligamento ou a reinicialização, é necessário criar softlinks em /etc/rc0.d/ e /etc/rc6.d
Exemplo:
fonte
chmod
altera os sinalizadores de permissão do destino do link, que é o mesmo para os dois argumentos. A especificação de ambos é redundante.Você pode encontrar uma solução aqui: Suspenda / retome todas as caixas do Vagrant no desligamento / inicialização do sistema .
Existe um script init simples que suspende todas as caixas em execução antes de desligar.
Instalação
Edite
/etc/init.d/vagrant-boxes
e cole o script do artigo acima e salve. Ou faça o download aqui e salve-o em/etc/init.d/vagrant-boxes
. No debian / ubuntu etc, executefonte
Para o Ubuntu 14.10 você algo como
RC04
nãoRC99
O que fazer do zero
/etc/init.d/scriptName
ln -s /etc/rc6.d/K04scriptName /etc/init.d/scriptName
Passos pelos quais passei
fonte