Eu tenho esse script bem simples:
#!/bin/sh
# Variables
directorio=$(dirname "${0}")
distribucion=$(lsb_release -s -c)
arquitectura=$(uname -m)
echo "I am in ${directorio}, in ${distribucion} with the ${arquitectura} arch."
exit 0
O que realmente funciona, retorna a seguinte linha:
I am in ., in xenial with the x86_64 arch.
Então tudo parece estar bem, exceto que toda vez que eu o executo, o sistema não consegue desligar nem reiniciar:
Ele fica preso aí mesmo -image-, e não faz mais nada.
Estou executando um Ubuntu Mini 16.04.4 LTS x86_64, atualizado para o mais recente, sem nenhuma modificação.
Responder1
Em primeiro lugar, obrigado a todos por ajudarem a encontrar o problema, especialmente aocontribuição da sobremesa:
Por que você acha que o problema de desligamento tem algo a ver com o script? Na verdade, isso é muito improvável – desmontar a unidade mencionada na primeira linha parece ser o problema. ~sobremesa
Esse tipo de comportamento parece ser uma espécie de bug nos pacotes NFS ( nfs-common
), então venho testando como reproduzir isso, e uma forma de evitá-lo.
Para reproduzi-lo usei o seguinte:
Hospedar
- KDE Neon 5.12 x86_64 (baseado no Ubuntu 16.04 LTS)(atualizado e atualizado para o mais recente)
openssh-client
(versão1:7.2p2-4ubuntu2.4
)nfs-kernel-server
(versão1:1.2.8-9ubuntu12.1
)virtualbox-5.2
(versão5.2.12-122591~Ubuntu~xenial
) -para virtualizar o convidado
Convidado
- Ubuntu Mini 16.04.4 LTS x86_64(atualizado e atualizado para o mais recente) -nenhuma interface ou pacote extra foi instalado nesta máquina
openssh-server
(versão1:7.2p2-4ubuntu2.4
)nfs-common
(versão1:1.2.8-9ubuntu12.1
)
O problema
O problema parece estar relacionado à pasta montada pelo NFS dentro da máquina convidada. Este convidado é preparado /etc/fstab
para montar automaticamente a pasta compartilhada NFS do host.
Digamos:
# Host
/data/shared davdriver:davdriver 777
|
+---- /folder1 davdriver:davdriver 777
+---- /folder2 davdriver:davdriver 777
+---- /script.sh davdriver:davdriver 777 #The script mentioned in the question
# Guest
/data/nfs davdriver:davdriver 777 #fstab: nofail,auto,noatime,nolock,intr,tcp,actimeo=1800
Tudo neste ponto funciona perfeitamente bem.
O problema é que a máquina fica presa de alguma forma ao executar um script e qualquer comando do tipo poweroff ( poweroff
, reboot
, ...) dentro de uma pasta montada em NFS.
Eu fiz os seguintes testes:
Teste 1: Corridapoweroff
DENTROa pasta montada em NFS
cd /data/nfs/folder1
poweroff
# OK
Teste 2: Executando um script compartilhado epoweroff
DENTROa pasta montada em NFS
cd /data/nfs/
./script.sh
poweroff
# GETS STUCK ! (the snapshot in the question)
Teste 3: Executando um script compartilhado epoweroff
FORAa pasta montada em NFS
cd /data/nfs/
./script.sh
cd /data
poweroff
# OK
Teste 4: Executando um script compartilhado, desmontando a pasta montada em NFS e executando opoweroff
DENTROa pasta usada para montar o NFS.
cd /data/nfs/
./script.sh
cd /data
umount ./nfs
cd ./nfs
poweroff
# OK
A solução
Depois de executar o script, o serviço NFS parece estar ocupado com qualquer processo em segundo plano, e apenas executar o poweroff
comando fora da pasta montada no NFS parece ajudar o sistema a desmontá-lo e permitir seu desligamento.
Também é possível desmontá-lo primeiro e acessar a pasta raiz que foi montada, este cenário parece não afetar e o sistema também será desligado.