У меня есть довольно простой скрипт:
#!/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
Что на самом деле работает, возвращает следующую строку:
I am in ., in xenial with the x86_64 arch.
Итак, все вроде бы в порядке, за исключением того, что каждый раз, когда я запускаю его, система не может ни выключиться, ни перезагрузиться:
Он застревает прямо там -image-, и больше ничего не делайте.
Я использую Ubuntu Mini 16.04.4 LTS x86_64, обновленную до последней версии, без каких-либо изменений.
решение1
Прежде всего, спасибо всем за помощь в поиске проблемы, особенновклад десерта:
Почему вы думаете, что проблема с выключением как-то связана со скриптом? Это на самом деле очень маловероятно – скорее всего, проблема в размонтировании диска, упомянутого в первой строке. ~dessert
Такое поведение, похоже, является своего рода ошибкой в пакетах NFS ( nfs-common
), поэтому я тестировал, как воспроизвести ее и как ее избежать.
Для его воспроизведения я использовал следующее:
Хозяин
- KDE Neon 5.12 x86_64 (на основе Ubuntu 16.04 LTS)(обновлено и модернизировано до последней версии)
openssh-client
(версия1:7.2p2-4ubuntu2.4
)nfs-kernel-server
(версия1:1.2.8-9ubuntu12.1
)virtualbox-5.2
(версия5.2.12-122591~Ubuntu~xenial
) -для виртуализации гостя
Гость
- Ubuntu Mini 16.04.4 LTS x86_64(обновлено и модернизировано до последней версии) -на этой машине не установлены ни интерфейсы, ни дополнительные пакеты
openssh-server
(версия1:7.2p2-4ubuntu2.4
)nfs-common
(версия1:1.2.8-9ubuntu12.1
)
Проблема
Проблема, похоже, связана с смонтированной папкой NFS внутри гостевой машины. Этот гость подготовлен /etc/fstab
к автоматическому монтированию общей папки NFS хоста.
Скажем так:
# 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
На данный момент все работает отлично.
Проблема в том, что машина каким-то образом зависает при запуске скрипта и любой команды типа poweroff ( poweroff
, reboot
, ...) внутри смонтированной папки NFS.
Я провел следующие тесты:
Тест 1: Бегpoweroff
ВНУТРИпапка, смонтированная по NFS
cd /data/nfs/folder1
poweroff
# OK
Тест 2: Запуск общего скрипта иpoweroff
ВНУТРИпапка, смонтированная по NFS
cd /data/nfs/
./script.sh
poweroff
# GETS STUCK ! (the snapshot in the question)
Тест 3: Запуск общего скрипта иpoweroff
СНАРУЖИпапка, смонтированная по NFS
cd /data/nfs/
./script.sh
cd /data
poweroff
# OK
Тест 4: Запуск общего скрипта, размонтирование смонтированной папки NFS и запускpoweroff
ВНУТРИпапка, используемая для монтирования NFS.
cd /data/nfs/
./script.sh
cd /data
umount ./nfs
cd ./nfs
poweroff
# OK
Решение
После запуска скрипта служба NFS, по-видимому, занята каким-то фоновым процессом, и только запуск команды poweroff
вне смонтированной папки NFS, по-видимому, помогает системе отмонтировать ее и разрешить ей завершить работу.
Также можно сначала размонтировать его и получить доступ к корневой папке, которая была смонтирована; этот сценарий, по-видимому, не повлияет, и система также выключится.