unattended-upgrades
がインストールされている場合、10回のシャットダウン/再起動のうち9回が「無人アップグレードの開始シャットダウン」中にハングします。このハングにより、シャットダウンプロセスが5〜10分間停止します。
/etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades
を使用して無人アップグレードを無効にすると、問題が発生します。
シャットダウン/リブート(Sudo service unattended-upgrades stop
)の前にサービスを終了すると、問題は引き続き発生します。
パッケージ(Sudo apt remove unattended-upgrades
)を削除すると、問題は発生しなくなります。
これは、新しくインストールされたUbuntu Server 16.04.1
(インストールGUIまたは無人アップグレードの手動インストールでインストールされたunattended-upgrades
の両方)バージョンで発生します
両方のKern.log & syslog
にはシャットダウンプロセスが表示されません(ファイルシステムが既にアンマウントされているためだと思います)
他の誰かがこの問題を発見または修正しましたか?それをトラブルシューティングしようとしてクレイジーになります。
問題は、シャットダウン時に実行されるスクリプトにあるようです。
対応するファイルを次のように識別しました:
find /etc/systemd -name *unattended*
それは私に関連するsystemdスクリプトを与えました:
/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
次に、シャットダウン時に実行されるスクリプトを教えてくれました。
/usr/share/unattended-upgrades/unattended-upgrade-shutdown
このスクリプトには、/ etc/apt/apt.conf.d/50unattended-upgradesのセクションに関連する120行目のセクションがあります-> Unattended-Upgrade :: InstallOnShutdown
/ usr/share/unattended-upgrades/unattended-upgrade-shutdownの120行目:
if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False):
問題:キーワード「False」が必要ですが、apt confでは「false」(正確な文字列比較)を追加する必要があります!
私は3つの異なる方法でストールシャットダウンを修正/回避することができました:
ここで変更するファイルは無人アップグレードの更新によって上書きされないため、この設定は、実際の修正が提供されるまでアップグレードしても安全です。問題:根本的な原因が修正されると、停止が再び停止するため、これを回避策Bと組み合わせることをお勧めします。
vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service
[サービス] Type = oneshot ExecStart =/usr/share/unattended-upgrades/unattended-upgrade-shutdown TimeoutStartSec = 15
ここで変更するファイルは、無人アップグレードの更新によって上書きされる可能性があるため、この設定はアップグレードしても安全ではありません。これに加えて、何かを修正することからはかけ離れていますが、システムがシャットダウンする際に数分待たないことが保証されます。無人アップグレードのアップグレード後に、これを再度設定する必要がある場合があることに注意してください!
/ usr/share/unattended-upgrades/unattended-upgrade-shutdownのパッチ:
---/tmp/unattended-upgrade-shutdown 2017-02-03 14:53:03.238103238 +0100 +++/tmp/unattended-upgrade-shutdown_fix 2017-02-03 14 :53:17.685589001 +0100 @@ -117,7 +117,7 @@ #実行する p =なし apt_pkg.init_config() -if apt_pkg.config.find_b( "Unattended-Upgrade :: InstallOnShutdown"、False): + if apt_pkg.config.find_b( "Unattended-Upgrade :: InstallOnShutdown"、false): env = copy.copy(os.environ) env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1" logging.debug( "シャットダウンモードでの無人アップグレードの開始")
tbh最後の1つだけが実際の修正です。他の両方のオプションは、実際の修正が実装されるまでの単なる回避策です。
これはアップストリームで行う必要があり、これは両方のディストリビューションのDebian(Debian Stretchでテスト済み)とUbuntu(Ubuntu 16.04.1でテスト済み)の両方に影響するためです。
ここでバグレポートを開きました: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611
回避策として、このスクリプトを使用して修正します。
#!/usr/bin/env bash
sed -i '/if apt_pkg.config.find_b/s/False/false/' /usr/share/unattended-upgrades/unattended-upgrade-shutdown
exit
うまくいけば、すぐにアップストリームになります。