O sistema não pode ser desligado ao atribuir a saída dos comandos às variáveis

1

Eu tenho este 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.

Assim, tudo parece estar bem, exceto que, toda vez que eu o executo, o sistema não é capaz de desligar ou reinicializar:

Ela fica presa bem na imagem, e não faz mais nada.

Estou executando um Ubuntu Mini 16.04.4 LTS x86_64, atualizado para o mais recente, sem quaisquer modificações.

    
por David Tabernero M. 09.06.2018 / 20:16

1 resposta

3

Primeiro de tudo, obrigado a todos por ajudarem a encontrar o problema, especialmente para o contribuição de sobremesa :

Why do you think the shutdown issue has anything to do with the script? That’s actually very unlikely – unmounting the drive mentioned in the first line rather seems to be the problem. ~dessert

Esse tipo de comportamento parece ser um tipo de bug nos pacotes NFS ( nfs-common ), então tenho testado como reproduzir isso e como evitá-lo.

Para reproduzi-lo, usei o seguinte:

Anfitrião

  • KDE Neon 5.12 x86_64 (baseado no Ubuntu 16.04 LTS) (atualizado e atualizado para o mais recente)
  • openssh-client (versão 1:7.2p2-4ubuntu2.4 )
  • nfs-kernel-server (versão 1:1.2.8-9ubuntu12.1 )
  • virtualbox-5.2 (versão 5.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) - nem qualquer interface nem pacote extra foi instalado nesta máquina
  • openssh-server (versão 1:7.2p2-4ubuntu2.4 )
  • nfs-common (versão 1:1.2.8-9ubuntu12.1 )

O problema

O problema parece estar relacionado com a pasta NFS montada dentro da máquina convidada. Este convidado é preparado via /etc/fstab para montar automaticamente a pasta compartilhada NFS do host.

Digamos que:

# 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 durante a execução de um script e qualquer comando poweroff-kind ( poweroff , reboot , ...) dentro de uma pasta montada pelo NFS.

Eu fiz os seguintes testes:

Teste 1: Executando poweroff INSIDE a pasta montada em NFS

cd /data/nfs/folder1
poweroff
# OK

Teste 2: Execução de um script compartilhado e poweroff INSIDE na pasta montada em NFS

cd /data/nfs/
./script.sh
poweroff
# GETS STUCK ! (the snapshot in the question)

Teste 3: Execução de um script compartilhado e poweroff FORA da 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 o poweroff INSIDE na pasta usada para montar o NFS.

cd /data/nfs/
./script.sh
cd /data
umount ./nfs
cd ./nfs
poweroff
# OK

A solução

Após a execução do script, o serviço NFS parece estar ocupado com qualquer processo em segundo plano, e somente executando o comando poweroff fora da pasta montada pelo 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.

    
por David Tabernero M. 10.06.2018 / 19:34