Se suas VMs vagantes estiverem usando o VirtualBox, você pode modificar o / etc / default / virtualbox e alterar a linha que diz:
SHUTDOWN_USERS=""
para
SHUTDOWN_USERS="all"
Isso me corrigiu no Ubuntu 14.04
Eu tenho uma máquina rodando algumas máquinas virtuais vagantes. O problema que tenho é que às vezes me esqueço de desligar a VM antes de desligar ou reiniciar a máquina. Por causa disso, minha máquina ficou presa com esta mensagem: waiting for vboxnet0 to become free
Pesquisei sobre soluções e encontrei esta página:
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?
Se suas VMs vagantes estiverem usando o VirtualBox, você pode modificar o / etc / default / virtualbox e alterar a linha que diz:
SHUTDOWN_USERS=""
para
SHUTDOWN_USERS="all"
Isso me corrigiu no Ubuntu 14.04
Para executar um script no desligamento ou reinicialização:
sudo chmod +x K99_script
Notas:
Crie um arquivo executável do shell com seu script no diretório /etc/init.d/.
Como isso deve ser executado durante o desligamento ou reinicialização, é necessário criar softlinks em /etc/rc0.d/ e /etc/rc6.d
Exemplo:
sudo ln -s /etc/init.d/<your_file> /etc/rc0.d/k99stop_vm
sudo ln -s /etc/init.d/<your_file> /etc/rc6.d/k99stop_vm
sudo chmod a+x /etc/rc0.d/k99stop_vm /etc/rc6.d/k99stop_vm
Agora que as variantes do Ubuntu e o Mint mudaram para o systemd, descobri que minhas soluções antigas baseadas no acima são menos satisfatórias. Pesquisei na Web para descobrir como fazer isso com o systemd e acabei combinando a sabedoria dos outros e documentando-a como uma postagem do blog no 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.
Primeiro crie os scripts que você deseja executar na inicialização e / ou no desligamento. Basta fazer um, se você não precisar de ambos. Eu criei .scopening_atstart e .scfullcopy_atend.
Em seguida, verifique se ambos são executáveis clicando com o botão direito do mouse no arquivo, selecionando propriedades e certificando-se de que, sob permissões, você tenha marcado a opção Permitir execução do arquivo como um programa.
Os dois arquivos que 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 eram da 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
Então eu 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 ter incluído 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 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 inserir o destino multiusuário e o serviço de parada quando sair do destino multiusuário. Arquivos de serviço alternativos com diferentes condições de ativação serão descritos abaixo.
Comandos úteis adicionais incluem:
inicialização ativada pelo systemctl
Inicialização ativa do systemctl
reinicialização do systemctl restart
Mais pode ser encontrado na referência acima.
Esta descrição assume que você opera a partir do seu diretório home ao invés de / home / john, use sudo conforme necessário, e sua escolha de editor onde eu 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. Eu vou executar scripts no meu diretório home, mas @don_crissti mostra algumas alternativas em Stack Exchange .
svim /etc/systemd/system/start_and_stop.service
e copie no 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, ative o serviço com o comando:
systemctl enable start_and_stop
e reinicie seu 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.
Os arquivos acima de tudo usam a abertura ou fechamento do ambiente multiusuário para iniciar a execução dos scripts. O arquivo abaixo usa o início de quatro processos potenciais de desligamento para iniciar seus scripts. Adicionar ou remover os alvos na linha Antes + a linha WantedBy permitirá que você faça distinções mais sutis:
Este arquivo foi proposto na segunda resposta deste post , mas não consegui executá-lo até adicionar uma seção de instalação.
Novamente, edite o script em /etc/systemd/service/
e ative-o usando systemctl enable your_file_name
. Quando mudei os alvos, usei o comando systemclt disable file_name
e, em seguida, reativei o link para os diretórios de destino. Reinicie e o serviço estará funcionando.
[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
Você pode encontrar uma solução aqui: Suspender / retomar todas as caixas do Vagrant no desligamento / inicialização do sistema .
Existe um script de inicialização simples que suspende todas as caixas de 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, execute
# update-rc.d vagrant-boxes defaults 99 01
O número 99 é o número de sequência e deve ser maior que (no meu caso, o número 20 do Virtualbox, que por sinal é o padrão nas distribuições Debian). O segundo número é a sequência ao desligar o computador. Então, pode ser bom fazer primeiro.
Para o Ubuntu 14.10 você é algo como RC04
não RC99
O que fazer do zero
/etc/init.d/scriptName
ln -s /etc/rc6.d/K04scriptName /etc/init.d/scriptName
Etapas que passei