Fabric: Ubuntu 16.04 ν˜ΈμŠ€νŠΈμ—μ„œ μž¬λΆ€νŒ…μ΄ 쀑단됨

에 λ§Œλ“  2016λ…„ 07μ›” 18일  Β·  21μ½”λ©˜νŠΈ  Β·  좜처: fabric/fabric

λ‚΄μž₯ 된 reboot() ν•¨μˆ˜λŠ” Ubuntu 14.04 및 FreeBSD 10.x ν˜ΈμŠ€νŠΈμ—μ„œ μ™„λ²½ν•˜κ²Œ μž‘λ™ν–ˆμ§€λ§Œ Ubuntu 16.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

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μš°λΆ„νˆ¬ 버그 https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1645002 λŠ” 16.10μ—μ„œ μˆ˜μ • 된 κ²ƒμœΌλ‘œ ν‘œμ‹œλ˜μ—ˆμ§€λ§Œ 아직 16.04μ—μ„œλŠ” μˆ˜μ •λ˜μ§€ μ•Šμ•˜μœΌλ©° μ–Έμ œ λ°œμƒν• μ§€ λΆˆλΆ„λͺ…ν•©λ‹ˆλ‹€.

λ‚˜λ₯Ό μœ„ν•΄ ν˜„μž¬ λ™μž‘μ€ paramiko / fabric이 ssh 연결이 λ‹« ν˜”μŒμ„ μ¦‰μ‹œ κ°μ§€ν•˜μ§€λ§Œ paramiko / fabric이 μž¬λΆ€νŒ… λͺ…령이 μ™„λ£Œλ˜μ—ˆμŒμ„ ν™•μΈν•˜κΈ° μ „μž…λ‹ˆλ‹€. 적어도 원본 λ³΄κ³ μ„œ μ—μ„œμ²˜λŸΌ λ¬΄κΈ°ν•œ μ€‘λ‹¨λ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

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

Plain reboot() 은 (λŠ”) AWS EC2 및 둜컬 가상 μƒμž VM에 λŒ€ν•œ λͺ‡ 가지 ν…ŒμŠ€νŠΈμ—μ„œ μ €λ₯Ό μœ„ν•΄ μΌκ΄€λ˜κ²Œ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. (항상 ν‚€ 파일 인증을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.)

μœ„μ˜ μ„ΈλΆ€ 사항없이 μ œμ•ˆν•œλŒ€λ‘œ 짧고 μš°μ•„ν•œ ν•΄κ²° 방법을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

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

μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€ (AWS EC2 및 둜컬 가상 λ°•μŠ€ VM에 λŒ€ν•œ λͺ‡ 가지 ν…ŒμŠ€νŠΈμ—μ„œ λͺ¨λ‘ μ΅œμ‹  μš°λΆ„νˆ¬ 16.04λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€). "shutdown -r now"λŠ” "reboot"처럼 μž‘λ™ν•˜κ³  μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

freebsd 및 openbsd man νŽ˜μ΄μ§€λ₯Ό κ°„λž΅νžˆ μ‚΄νŽ΄ λ³΄μ•˜λŠ”λ° ν•΄λ‹Ή 맀개 λ³€μˆ˜λ₯Ό μ§€μ›ν•˜λŠ” μ’…λ£Œ λͺ…λ Ήμ΄μžˆλŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. "shutdown -r +0"λͺ…령이 "reboot"κ°€ μž‘λ™ν•˜λŠ” 거의 λͺ¨λ“  μœ λ‹‰μŠ€ μ‹œμŠ€ν…œμ—μ„œ μž‘λ™ ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€. λ”°λΌμ„œ κΈ°λ³Έ λͺ…령을 λ³€κ²½ν•˜κ±°λ‚˜ λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈ ν•  λ•Œ κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (κ·ΈλŸ¬λ‚˜ λ¨Όμ € BSD μ‹œμŠ€ν…œμ— λŒ€ν•œ ν…ŒμŠ€νŠΈ λ³΄κ³ μ„œλ₯Όλ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.)

λͺ¨λ“  21 λŒ“κΈ€

run ( 'reboot')와 λ˜‘κ°™μŠ΅λ‹ˆλ‹€.

μˆ˜λ™ run 와 λ™μΌν•˜λ‹€λŠ” 것은 λ†€λΌμš΄ 일이 μ•„λ‹™λ‹ˆλ‹€. Ubuntu의 μž¬λΆ€νŒ… 처리, SSH μ—°κ²° λ“±κ³Ό κ΄€λ ¨ν•˜μ—¬ λΆ„λͺ…νžˆ λ³€κ²½λœ 사항이 μžˆμŠ΅λ‹ˆλ‹€.

λˆˆμ— λ„λŠ” 것은 μ—†μ§€λ§Œ reboot() (λ¦¬λˆ…μŠ€κ°€ μ•„λ‹Œ Fab)은 맀우 κΈ°λ³Έμ μž…λ‹ˆλ‹€. λ‹¨μˆœνžˆ sudo('reboot') λ₯Ό ν˜ΈμΆœν•˜κ³  Fabric의 일반 재 μ—°κ²° 섀정을 μΌμ‹œμ μœΌλ‘œ μ‘°μ •ν•˜μ—¬ μ‚¬μ†Œν•˜μ§€ μ•Šμ€ μž¬λΆ€νŒ… μ‹œν€€μŠ€ ν›„ 재 연결을 처리 ν•  수 β€‹β€‹μžˆμŠ΅λ‹ˆλ‹€. (κΈ°λ³Έκ°’κ³Ό λΉ„κ΅ν•˜μ—¬ 맀우 λΉ λ₯΄κ²Œ ν¬κΈ°ν•©λ‹ˆλ‹€).

https://github.com/fabric/fabric/blob/c0224a52df59821f21a8c0bd47ce15e42c2046a4/fabric/operations.py#L1244 μ°Έμ‘° -이λ₯Ό μ‘°μ • ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ λ‹¨μ„œλ₯Ό 얻을 수 μžˆμœΌλ―€λ‘œ Paramiko의 λ‘œκΉ…μ„ ν™œμ„±ν™” ν•΄λ³΄μ‹­μ‹œμ˜€ (문제 ν•΄κ²° νŽ˜μ΄μ§€ ν•˜λ‹¨ μ°Έμ‘°-http://www.fabfile.org/troubleshooting.html).

사싀, μš°λΆ„νˆ¬μ˜ reboot 은 (λŠ”) Fabric의 μ‹€ν–‰ ν•Έλ“€λŸ¬ ( run / sudo )에 μ’…λ£Œ μ½”λ“œλ₯Ό μ œμΆœν•˜κ±°λ‚˜ μ’…λ£Œν•˜μ§€ μ•ŠλŠ” κ²ƒμ²˜λŸΌ λ“€λ¦½λ‹ˆλ‹€ run sudo λŠ” κΈ°λ‹€λ Έλ‹€κ°€ Enterλ₯Ό 으깨면 ν™”λ₯Όλƒ…λ‹ˆλ‹€.

reboot() μ½”λ“œλ₯Ό 보면 sudo('reboot') 호좜이 κ²°κ΅­ μ’…λ£Œ 될 κ²ƒμœΌλ‘œ μ˜ˆμƒν•˜λ―€λ‘œ A) μž μ‹œ κΈ°λ‹€λ¦° ν›„ B) 재 연결을 μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Fabric μΈ‘μ—μ„œ 싀행이 sudo λœλ‹€λŠ” 사싀은 μ›κ²©μœΌλ‘œ 무언가가 κ·Έ κΈ°λŒ€λ₯Ό μœ„λ°˜ν•˜κ³  μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. μ’€ 이상해. _ μ•„λ§ˆ _ Fabric 자체의 버그 일 수 μžˆμ§€λ§Œ μ›κ²©μ§€μ—μ„œλŠ” λ‚˜μœ λ™μž‘μ²˜λŸΌ λŠκ»΄μ§‘λ‹ˆλ‹€. (μΆ”μ‹  : μ–΄λ–€ 패브릭 버전이 ν‘œμ‹œ λ˜λ‚˜μš”?)

μ—‰λš±ν•œ 생각- timeout= 에 sudo λ₯Ό μ„€μ • ν•œ λ‹€μŒ κ·Έ μ£Όμœ„μ— except TimeoutException: pass μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œν•˜λ©΄μ΄ (μ΄μƒν•œ) μƒν™©μ—μ„œλ„ 기본적으둜 재 연결을 μ‹œλ„ν•©λ‹ˆλ‹€.

단점은 reboot κ°€ μ‹€μ œλ‘œ 쀑단 되고 μ‹œμŠ€ν…œμ΄ μ‹€μ œλ‘œ μž¬λΆ€νŒ…λ˜μ§€ μ•ŠλŠ” κ²½μš°μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μœ„μ˜ λ³€κ²½μœΌλ‘œ 인해 ν•΄λ‹Ή κ²½μš°μ— λŒ€ν•΄ _ 더 λ‚˜μœ _ 상황을 λ§Œλ“€ μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. λ¬΄ν•œ 쀑단이 계속 λ°œμƒν•©λ‹ˆλ‹€. sudo λŒ€μ‹  μ—°κ²° 루프.

Ubuntu 16.04μ—μ„œ 정말 μ΄μƒν•˜κ³  λ³€κ²½λœ λ™μž‘μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 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~. aka enter, tilde, λ§ˆμΉ¨ν‘œλ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€. 이것이 κΈ°λ³Έ ssh μ΄μŠ€μΌ€μ΄ν”„ 문자이고 ssh에 λŒ€ν•œ disconnect λͺ…λ Ήμž…λ‹ˆλ‹€. ctrl- c λ˜λŠ” ctrl-d, sshλŠ” λ‹€λ₯Έ μͺ½μ—μ„œ 싀행쀑인 ν”„λ‘œμ„ΈμŠ€μ—μ΄λ₯Ό μ „λ‹¬ν•˜λ €κ³ ν•©λ‹ˆλ‹€.)

ν•œ 가지 해결책은 shutdown -r +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 () μ‚¬μš©κ³Ό κ΄€λ ¨λœ λ¬Έμ œκ°€μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ•”ν˜Έλ‘œ μ—°κ²°ν•˜λ©΄ μž¬λΆ€νŒ…μ΄ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜μ§€λ§Œ ν‚€ 파일 인증을 μ‚¬μš©ν•˜λ©΄ 연결이 λŠμ–΄μ§€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€ (μž¬λΆ€νŒ…μ΄ μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€).

μš°λΆ„νˆ¬ 버그 https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1645002 λŠ” 16.10μ—μ„œ μˆ˜μ • 된 κ²ƒμœΌλ‘œ ν‘œμ‹œλ˜μ—ˆμ§€λ§Œ 아직 16.04μ—μ„œλŠ” μˆ˜μ •λ˜μ§€ μ•Šμ•˜μœΌλ©° μ–Έμ œ λ°œμƒν• μ§€ λΆˆλΆ„λͺ…ν•©λ‹ˆλ‹€.

λ‚˜λ₯Ό μœ„ν•΄ ν˜„μž¬ λ™μž‘μ€ paramiko / fabric이 ssh 연결이 λ‹« ν˜”μŒμ„ μ¦‰μ‹œ κ°μ§€ν•˜μ§€λ§Œ paramiko / fabric이 μž¬λΆ€νŒ… λͺ…령이 μ™„λ£Œλ˜μ—ˆμŒμ„ ν™•μΈν•˜κΈ° μ „μž…λ‹ˆλ‹€. 적어도 원본 λ³΄κ³ μ„œ μ—μ„œμ²˜λŸΌ λ¬΄κΈ°ν•œ μ€‘λ‹¨λ˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

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

Plain reboot() 은 (λŠ”) AWS EC2 및 둜컬 가상 μƒμž VM에 λŒ€ν•œ λͺ‡ 가지 ν…ŒμŠ€νŠΈμ—μ„œ μ €λ₯Ό μœ„ν•΄ μΌκ΄€λ˜κ²Œ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. (항상 ν‚€ 파일 인증을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.)

μœ„μ˜ μ„ΈλΆ€ 사항없이 μ œμ•ˆν•œλŒ€λ‘œ 짧고 μš°μ•„ν•œ ν•΄κ²° 방법을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€.

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

μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€ (AWS EC2 및 둜컬 가상 λ°•μŠ€ VM에 λŒ€ν•œ λͺ‡ 가지 ν…ŒμŠ€νŠΈμ—μ„œ λͺ¨λ‘ μ΅œμ‹  μš°λΆ„νˆ¬ 16.04λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€). "shutdown -r now"λŠ” "reboot"처럼 μž‘λ™ν•˜κ³  μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

freebsd 및 openbsd man νŽ˜μ΄μ§€λ₯Ό κ°„λž΅νžˆ μ‚΄νŽ΄ λ³΄μ•˜λŠ”λ° ν•΄λ‹Ή 맀개 λ³€μˆ˜λ₯Ό μ§€μ›ν•˜λŠ” μ’…λ£Œ λͺ…λ Ήμ΄μžˆλŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. "shutdown -r +0"λͺ…령이 "reboot"κ°€ μž‘λ™ν•˜λŠ” 거의 λͺ¨λ“  μœ λ‹‰μŠ€ μ‹œμŠ€ν…œμ—μ„œ μž‘λ™ ν•  것이라고 μƒκ°ν•©λ‹ˆλ‹€. λ”°λΌμ„œ κΈ°λ³Έ λͺ…령을 λ³€κ²½ν•˜κ±°λ‚˜ λ¬Έμ„œλ₯Ό μ—…λ°μ΄νŠΈ ν•  λ•Œ κ³ λ €ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (κ·ΈλŸ¬λ‚˜ λ¨Όμ € 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κ°€ μ„€μΉ˜λœ FreeBSD 11.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 주석을 μˆ˜μ • ν•œ ν›„ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄ 이것이 ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” μš°λΆ„νˆ¬ 16.04 LTS μ„œλ²„ (Windows ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ)에 λŒ€ν•΄ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€.

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

참고둜, 18.04.2 LTS μ„œλ²„μ—μ„œ μ—¬μ „νžˆ 이것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이것에 λŒ€ν•œ μˆ˜μ • 사항이 μžˆμŠ΅λ‹ˆκΉŒ? 16.04μ—μ„œλ„ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰