非常にシンプルなスクリプトがあります:
#!/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 ミニ 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
この時点ではすべてが正常に動作しています。
問題は、NFS マウントされたフォルダー内でスクリプトや電源オフ関連のコマンド ( poweroff
、、 ...) を実行しているときに、マシンが何らかの理由で停止してしまうことです。reboot
以下のテストを実施しました:
テスト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 マウントされたフォルダーの外部でコマンドを実行することによってのみ、システムをアンマウントしてシャットダウンできるようになるようです。
最初にアンマウントして、マウントされているルート フォルダーにアクセスすることも可能です。このシナリオは影響しないようで、システムの電源もオフになります。