Fabric: Ubuntu16.04ホストで再起動が壊れおいたす

䜜成日 2016幎07月18日  Â·  21コメント  Â·  ゜ヌス: fabric/fabric

組み蟌みのreboot()関数は、Ubuntu14.04ホストずFreeBSD10.xホストの䞡方で完党に機胜しおいたすが、Ubuntu16.04ホストでは機胜したせん。

Ubuntu 14.04で䜕が起こっおいるのですか
このような出力を受け取り、再起動ファブリックが再接続した埌、システムが再起動したす。

[ubuntu] out:
[ubuntu] out:
[ubuntu] out: Broadcast message from root<strong i="9">@ubuntu</strong>
[ubuntu] out:
[ubuntu] out:   (/dev/pts/0) at 15:02 ...
[ubuntu] out:
[ubuntu] out:
[ubuntu] out:
[ubuntu] out:
[ubuntu] out: The system is going down for reboot NOW!
[ubuntu] out:
[ubuntu] out:

Ubuntu 16.04で䜕が起こっおいるのか

  1. コマンドからの出力はたったくありたせん。
  2. システムは実際に再起動を開始したすただFabricに出力がありたせん
  3. システムは再起動を終了したすが、Fabricはそれを認識せず、再接続せず、出力もありたせん。
  4. ファブリックはただそこに座っお、䞀芋氞遠に埅っおいたす。

この状態でEnterキヌを抌すず、Fabricは実際に続行したすが、前に次のメッセヌゞが衚瀺されたす。

No handlers could be found for logger "paramiko.transport"
Warning: sudo() received nonzero return code -1 while executing 'reboot'!

私は再起動にこのコヌドを䜿甚しおいたす

def reboot_():
    with settings(warn_only=True):
        print 'rebooting'
        start_time = time.time()
        reboot(wait=1200)
        print 'reboot took: {} seconds'.format(time.time() - start_time)
Bug Core Needs investigation

最も参考になるコメント

ubuntuのバグhttps://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1645002は、16.10で修正枈みずしおマヌクされおい

私の珟圚の動䜜では、paramiko / fabricはssh接続が閉じられたこずを即座に怜出したすが、paramiko / fabricが再起動コマンドの完了を確認する前です。 少なくずも、元のレポヌトのように無期限にハングするこずはありたせん。

Fatal error: sudo() received nonzero return code -1 while executing!
...
Aborting.

プレヌンなreboot()は、AW​​SEC2ずロヌカルのvirtualboxVMに察するいく぀かのテストで䞀貫しおそれを行いたした。 私は垞にキヌファむル認蚌を䜿甚しおいたした。

䞊蚘の詳现なしで提案したように、短くお゚レガントな回避策を芋぀けたした。

reboot(command="shutdown -r +0")

それは私にずっお期埅どおりに機胜したしたAWSEC2ずロヌカルvirtualboxVMに察する私の少数のテストでは、すべお最新のubuntu 16.04を実行しおいたす。 「shutdown-rnow」は「reboot」のように動䜜し、機胜しおいないように芋えるこずに泚意しおください。

freebsdずopenbsdのマニュアルペヌゞをざっず芋おみたずころ、これらのパラメヌタをサポヌトするshutdownコマンドがあるようです。 コマンド「shutdown-r + 0」は、「再起動」が機胜したほずんどすべおのUNIXシステムで機胜するず思いたす。 したがっお、デフォルトのコマンドを倉曎したり、ドキュメントを曎新したりするこずを怜蚎できたす。 しかし、最初にBSDシステムでのテストのレポヌトを芋たいず思いたす。

党おのコメント21件

run 'reboot'ずたったく同じです

手動のrunず同じであるこずは驚くべきこずではありたせん。明らかに、Ubuntuの再起動やSSH接続などの凊理に関しお䜕かが倉曎されおいたす。

明らかなこずは䜕も思い浮かびたせんが、 reboot() LinuxではなくFabは非垞に基本的です-単にsudo('reboot')呌び出し、Fabricの䞀般的な再接続蚭定を䞀時的に埮調敎しお、重芁な再起動シヌケンス埌の再接続を凊理できるようにしたすデフォルトでは、すぐに諊めたす。

https://github.com/fabric/fabric/blob/c0224a52df59821f21a8c0bd47ce15e42c2046a4/fabric/operations.py#L1244を参照しお

たた、手がかりが埗られる可胜性があるため、Paramikoのロギングを有効にしおみおくださいトラブルシュヌティングペヌゞの䞋郚-http//www.fabfile.org/troubleshooting.htmlを参照。

実際には、考え盎し䞊で、それはUbuntuのように聞こえるreboot䜕ずか決しお出ない、たたはファブリックの実行ハンドラに終了コヌドを提出しおいる run / sudo 、あなたはその泚意以来、 sudoは、埅っおからEnterをマッシュするず怒っおしたうものです。

reboot()コヌドを芋るず、 sudo('reboot')呌び出しが最終的に終了するこずが期埅されおいるため、A少し埅っお、B再接続を開始できたす。

Fabricの偎では、実行がsudo内でぶらぶらしおいるずいう事実は、リモヌトで䜕かがその期埅に違反しおいるこずを意味したす。 ちょっず倉だ。 ファブリック自䜓のバグかもしれたせんが、リモヌト゚ンドでの動䜜が悪いように感じたす。 远蚘これはどのファブリックバヌゞョンで衚瀺されおいたすか

オフハンドの考え-おそらくsudoにtimeout=を蚭定し、次にその呚りにexcept TimeoutException: passを蚭定するこずができたす。 これにより、この奇劙な状況でも、デフォルトで再接続を詊みるこずが保蚌されたす。

唯䞀の欠点は、 rebootが実際にハングしおいお、システムsudo内ではなく、接続ルヌプ。

Ubuntu 16.04で倉曎されたもう1぀の非垞に奇劙な動䜜は、次のずおりです。 sshセッションでpoweroffを実行するず、マシンの電源はオフになりたすが、SSHセッションがハングしたす。 Ctrl + C、Ctrl + Dなどを実行する方法はありたせん。 私にできるこずは、_lot_を埅っおから、sshが次のように䞭止するこずだけです。
packet_write_wait: Connection to 192.168.56.11: Broken pipe

私はSSH接続凊理の深いポケットには本圓に興味がありたせんが、これは再起動の堎合ずたったく同じ問題である可胜性がありたす。

再起動が壊れたAWS䞊の最新のUbuntu 16.04、Fabric == 1.12.0が、別の方法で発生したした。 私にずっおそれはただ投げたす

Fatal error: sudo() received nonzero return code -1 while executing!

Requested: reboot
Executed: sudo -S -p 'sudo password:'  /bin/bash -l -c "reboot"

タヌミナルでsudo rebootを手動で実行するず動䜜したすホストが再起動したす。

泚目に倀するかもしれたせん

$ readlink /sbin/reboot 
/bin/systemctl
$ readlink /sbin/shutdown
/bin/systemctl

そしおもう䞀぀の奇劙なこず。 再起動コヌドをaws-cliを䜿甚するように倉曎し、呌び出し埌玄1秒かかり、非同期のようです、 sudo('add-apt-repository --yes ppa:nginx/stable')を実行したす。 垞に機胜しおいたしたが、再起動埌も-1が返されたした。

sudo: add-apt-repository --yes ppa:nginx/stable

Fatal error: sudo() received nonzero return code -1 while executing!

Requested: add-apt-repository --yes ppa:nginx/stable
Executed: sudo -S -p 'sudo password:'  /bin/bash -l -c "add-apt-repository --yes ppa:nginx/stable"

次に、 fabric.network.disconnect_all()远加しお、再接続するファブリックを䜜成しようずしたした。 その結果、パスワヌドが芁求されたしたなぜ??

[...] sudo: add-apt-repository --yes ppa:nginx/stable
[...] Login password for 'ubuntu': 

そしお、再起動埌にtime.sleep(60 * 3)を远加した埌にのみ機胜し始めたした。 これは明らかに貧匱なバンド゚むドであり、今ではパスワヌドの問題を適切に凊理する方法に戞惑っおいたす。 この問題に関連しおいるようです。

問題は、コマンドのステヌタスがssh接続を介しお戻る前に、「再起動」が「速すぎる」堎合があるこずのようです。

ヒント結果ずしおssh接続がフリヌズしおいる堎合 \n~.別名enter、tilde、periodず入力したす。これがデフォルトのssh゚スケヌプ文字であり、sshの切断コマンドです。ctrl-を詊すだけの堎合cたたはctrl-dの堎合、sshはそれを反察偎で実行されおいるプロセスに枡そうずしたす。

1぀の解決策は、 shutdown -r +1を䜿甚するこずです。これにより、次の1分間の再起動がスケゞュヌルされ、起動が開始されるたで1分間埅っおから、再接続の詊行が開始されたす。 確かに、1分埅぀のは玠晎らしいこずではありたせん。

詊しおみるハッキヌなこず shutdown -r +0はrebootず同等であるはずですが、VirtualBoxで実行されおいるUbuntu-16.04の限定テストでは、数分の1秒長くなる傟向があり、次のように衚瀺されたす手動sshセッションを切断する盎前のシェルプロンプト。

これはおそらく1444の重耇です

initデヌモンがupstartに切り替えられた堎合、再起動は期埅どおりに機胜したす。 systemdがsshdをすぐに殺しおいるようです。

Debian / Ubuntuのsystemdパッケヌゞにバグがあり、シャットダりン時に、SSHサヌビスの前にネットワヌクサヌビスを匷制終了しお、すべおがハングしたした。
最新のポむントリリヌスで修正されたした。 Ubuntuパッケヌゞのステヌタスがわからない。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=751636

Ubuntuのバグを報告したした
https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1645002

䞀郚のスクリプトでのrebootの䜿甚に関する問題もありたした。 パスワヌドで接続するず再起動が正しく機胜するこずがわかりたしたが、keyfile-authenticationを䜿甚するず、接続がハングアップしたした再起動が実行されたした。

ubuntuのバグhttps://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1645002は、16.10で修正枈みずしおマヌクされおい

私の珟圚の動䜜では、paramiko / fabricはssh接続が閉じられたこずを即座に怜出したすが、paramiko / fabricが再起動コマンドの完了を確認する前です。 少なくずも、元のレポヌトのように無期限にハングするこずはありたせん。

Fatal error: sudo() received nonzero return code -1 while executing!
...
Aborting.

プレヌンなreboot()は、AW​​SEC2ずロヌカルのvirtualboxVMに察するいく぀かのテストで䞀貫しおそれを行いたした。 私は垞にキヌファむル認蚌を䜿甚しおいたした。

䞊蚘の詳现なしで提案したように、短くお゚レガントな回避策を芋぀けたした。

reboot(command="shutdown -r +0")

それは私にずっお期埅どおりに機胜したしたAWSEC2ずロヌカルvirtualboxVMに察する私の少数のテストでは、すべお最新のubuntu 16.04を実行しおいたす。 「shutdown-rnow」は「reboot」のように動䜜し、機胜しおいないように芋えるこずに泚意しおください。

freebsdずopenbsdのマニュアルペヌゞをざっず芋おみたずころ、これらのパラメヌタをサポヌトするshutdownコマンドがあるようです。 コマンド「shutdown-r + 0」は、「再起動」が機胜したほずんどすべおのUNIXシステムで機胜するず思いたす。 したがっお、デフォルトのコマンドを倉曎したり、ドキュメントを曎新したりするこずを怜蚎できたす。 しかし、最初にBSDシステムでのテストのレポヌトを芋たいず思いたす。

shutdown -r +0は私たちにずっお十分ではありたせん。 再起動は手動タむムアりトを受け入れないため、次のようなこずも詊したした。

try:
    sudo("shutdown -r +0", timeout=300)
except NetworkError:
    pass
# in case the sudo times out during reboot
sleep(15)

このすべおの手を振っおいるにもかかわらず、次のコマンドは無期限にハングしたす。 接続プヌルがデッド接続を保持および䜿甚しおいる可胜性はありたすか もしそうなら、回避策はありたすか 接続レベルのタむムアりトを䞀時的に枛らすこずはできたすか

実際、 reboot()ように、既存の接続を眮き換える必芁がありたす。

https://github.com/fabric/fabric/blob/1.13.2/fabric/operations.py#L1289 -L1294

叀い問題を埩掻させお申し蚳ありたせんが、LXCコンテナを再起動しようずしたずきにこの問題が発生するこずも確認できたす。 @ploxilnのcommand="shutdown -r +0"の䜿甚に関する提案は、私たちにずっおはうたくいきたした。

bashがむンストヌルされたFreeBSD11.1の新芏むンストヌルでこの゚ラヌを確認する

reboot(wait=1)結果

Fatal error: sudo() received nonzero return code -1 while executing!

Requested: reboot
Executed: sudo -S -p 'sudo password:'  /usr/local/bin/bash -l -c "reboot"

Aborting.
Traceback (most recent call last):


    raise env.abort_exception(msg)
hosts.FabricException: sudo() received nonzero return code -1 while executing!

@ ambsw-technologyず@ploxilnのコメントを読んだ埌、物事を進めるためにこれが必芁になり

sudo('shutdown -r +0')
time.sleep(30)
fabric.state.connections.connect(env.host_string)

参考たでに、これは18.04.2LTSサヌバヌに察しおも芋られたす。

これに察する修正はありたすか 16.04でも問題が発生する

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

bitprophet picture bitprophet  Â·  6コメント

acdha picture acdha  Â·  4コメント

peteruhnak picture peteruhnak  Â·  4コメント

jmcgrath207 picture jmcgrath207  Â·  5コメント

Grazfather picture Grazfather  Â·  4コメント