Fabric: μ΄ˆκΈ°ν™” μŠ€ν¬λ¦½νŠΈλŠ” 자주 데λͺ¬μ„ μ‹œμž‘ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2011λ…„ 08μ›” 19일  Β·  19μ½”λ©˜νŠΈ  Β·  좜처: fabric/fabric

기술

IRC에 λŒ€ν•œ μ—¬λŸ¬ λ³΄κ³ μ„œμ™€ # 350에 λŒ€ν•œ 의견, 그리고 이제 메일 링리슀트 μŠ€λ ˆλ“œ .

아직 λͺ…ν™•ν•œ 원인은 μ—†μœΌλ©° μ—¬λŸ¬ λ²ˆλ³΄κ³ λ˜μ—ˆμ§€λ§Œ 지속적인 λ¬Έμ œμ΄κ±°λ‚˜ 이에 λŒ€ν•΄ 훨씬 더 많이 λ“£κ²Œ 될 κ²ƒμ΄λΌκ³ λŠ” μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€ 맀우 μ œν•œλœ ν…ŒμŠ€νŠΈλ₯Ό 톡해 문제λ₯Ό 30-50 % 정도 μž¬ν˜„ ν•  수 μžˆμ§€λ§Œ μž¬ν˜„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

증상은 λ‹¨μˆœνžˆ 데λͺ¬μ„ μ‹œμž‘ν•˜κ³  μ¦‰μ‹œ λ°˜ν™˜ν•˜λŠ” init μŠ€νƒ€μΌ μŠ€ν¬λ¦½νŠΈκ°€ OKλ₯Ό λ°˜ν™˜ν•˜κ³  0의 μ½”λ“œλ₯Ό λ°˜ν™˜ν•˜κ³  stdout에 "성곡"μƒνƒœ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•˜μ§€λ§Œ μ‹€μ œλ‘œ ν•΄λ‹Ή 데λͺ¬μ„ μŠ€ν•€ μ—…ν•˜μ§€λŠ” μ•ŠλŠ”λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚΄ 개인 ν…ŒμŠ€νŠΈλŠ” Ubuntu 10.04 (Lucid) VMκ³Ό 재고 Apache2 νŒ¨ν‚€μ§€μ˜ init 슀크립트λ₯Ό λŒ€μƒμœΌλ‘œν•˜λŠ” μ΅œμ‹  λ§ˆμŠ€ν„°λ₯Ό 톡해 μˆ˜ν–‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


Jeff Forcier ( bitprophet )κ°€ 2011-07-23 μ˜€ν›„ 7μ‹œ 25 λΆ„ EDT 에 처음 μ œμΆœν–ˆμŠ΅λ‹ˆλ‹€.

μ²˜μ§€

  • # 350 κ΄€λ ¨ : fabric이 일뢀 원격 λͺ…령을 μ€‘λ‹¨ν•©λ‹ˆλ‹€ (데λͺ¬ ν”„λ‘œκ·Έλž¨ 용).
Bug Docs Wart

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

이 λ¬Έμ œμ— μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€.
sudo둜 λͺ…령을 μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— tty = Falseλ₯Ό μ‚¬μš©ν•  μˆ˜μ—†λŠ” 상황이 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
>& /dev/null < /dev/null & μΆ”κ°€λŠ” 잘 μ‹€ν–‰λ˜μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹œμž‘λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λͺ…λ Ή μ‹€ν–‰ 쀄 λ‹€μŒμ— μ ˆμ „ λͺ¨λ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€ : nohup java -jar text.jar & sleep 5; exit 0

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

Jeff Forcier ( bitprophet )λŠ” λ‹€μŒκ³Ό 같이 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.


ν…ŒμŠ€νŠΈμ€‘μΈ init 슀크립트λ₯Ό κ³„μΈ‘ν–ˆμœΌλ©° λͺ¨λ“  것이 λ™μΌν•œ λ°©μ‹μœΌλ‘œ μ‹€ν–‰λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€ (즉, μ‹€μ œ 성곡 λ˜λŠ” κ°€μ§œ 성곡 μ‹œλ‚˜λ¦¬μ˜€). μ΄λŠ” λ¬Έμ œκ°€ 슀크립트 μžμ²΄κ°€ λ§Œλ“œλŠ” apachectl 호좜 내에 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

원인이 우리μͺ½μ— 무엇인지 μƒκ°ν•˜κΈ° μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

  • 반 λ¬΄μž‘μœ„μ΄κΈ° λ•Œλ¬Έμ— 경쟁 쑰건에 μ‹œλ‹¬λ¦¬λŠ” IO ν•˜μœ„ μ‹œμŠ€ν…œμ˜ κ³Όκ±° 문제λ₯Ό μƒκ°ν•˜κ²Œν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” 그것이 이런 μ‹μœΌλ‘œ 원격 λμ—μ„œ μ–΄λ–€ 영ν–₯을 λ―ΈμΉ  수 μžˆλŠ”μ§€μ— λŒ€ν•΄ μ •λ§λ‘œ 생각할 수 μ—†μœΌλ©° 경쟁 쑰건은 μ–΄μ¨Œλ“  λͺ¨λ‘ 둜컬 κΈ°λ°˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

    • 이λ₯Ό ν…ŒμŠ€νŠΈν•˜λŠ” ν•œ 가지 방법은이 λ¬Έμ œκ°€ Fab 0.9.x 및 pty = Trueμ—μ„œ λ°œμƒν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ (1.x의 ν˜„μž¬ κΈ°λ³Έκ°’κ³Ό 일치).

  • λ˜ν•œ pty와 κ΄€λ ¨ 될 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 1.0 μ΄μ „μ—λŠ” 이것이 문제 μ˜€κ³  ptyλ₯Ό True둜 μ„€μ •ν•˜λŠ” 것이 κΈ°λ³Έ λ™μž‘μ˜ μ£Όμš” λ³€κ²½ 사항 쀑 ν•˜λ‚˜μ˜€μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ SSH의 request-a-pty ν•˜μœ„ μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•˜λ©΄ init μŠ€ν¬λ¦½νŠΈκ°€ μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜λŠ” 이유λ₯Ό μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

    • μ—¬κΈ°μ„œ ν…ŒμŠ€νŠΈλŠ” ssh -t <hostname> <command> λ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμ œκ°€ μž¬ν˜„λ˜λŠ”μ§€ ν™•μΈν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.


2011-07-23 07:45 pm EDT

Jeff Forcier ( bitprophet )λŠ” λ‹€μŒκ³Ό 같이 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.


apache2ctl μžμ²΄λŠ” Apache mpm-worker μ„€μΉ˜ μœ„μΉ˜μ—μžˆλŠ” μ‹€μ œ λ°”μ΄λ„ˆλ¦¬ μ‹€ν–‰ νŒŒμΌμ— λŒ€ν•œ 심볼릭 링크 인 /usr/sbin/apache2 ν˜ΈμΆœν•˜λŠ” λ‹¨μˆœνžˆ 래퍼 Bash μŠ€ν¬λ¦½νŠΈμž…λ‹ˆλ‹€. 특히 일반적인 start μ‚¬μš©μ—μ„œλŠ” /usr/sbin/apache2 -k start ν˜ΈμΆœν•©λ‹ˆλ‹€. 이전과 λ§ˆμ°¬κ°€μ§€λ‘œ apache2ctl λŠ” re : return value λ˜λŠ” μ–΄λ–€ μ„Ήμ…˜μ΄ μ‹€ν–‰λ˜λŠ”μ§€ 두 가지 μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ λ‹€λ₯΄κ²Œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

/usr/sbin/apache2 의 λ¬Έμ„œλŠ” (μ•„νŒŒμΉ˜ μ‚¬μ΄νŠΈμ—μ„œλ„) μƒλŒ€μ μœΌλ‘œ μ œν•œμ μ΄λ©°, apachectl을 μ‚¬μš©ν•˜μ—¬ env varsλ₯Ό μ„€μ •ν•΄μ•Όν•œλ‹€λŠ” κ²ƒλ§Œ λͺ…μ‹œν•©λ‹ˆλ‹€ (μ •ν™•ν•©λ‹ˆλ‹€- apache2 μ‹€ν–‰ μžμ²΄λ§ŒμœΌλ‘œλ„ κ½€ ꡬ제 됨). λΆ„λͺ…νžˆ κ·Έ λ³€μˆ˜κ°€ μ„€μ •λ˜μ§€ μ•Šμ•˜λ‹€λŠ” 였λ₯˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.)

apache2ctl 의 apache2 호좜 직전에 env 의 좜λ ₯을 κ²€μ‚¬ν•˜λ©΄ μ‚¬μš©μž, κ·Έλ£Ή, pidfile μœ„μΉ˜ 및 언어와 같은 λͺ‡ 가지 ν•­λͺ© 만 μƒμ„±λ©λ‹ˆλ‹€. μ΄λŠ” 성곡과 μ‹€νŒ¨ 상황 μ‚¬μ΄μ—μ„œ λ³€κ²½λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 래퍼의 λ‹€μ–‘ν•œ μ†Œμ‹± 및 ν™˜κ²½ λ³€μˆ˜ 섀정에 λ•Œλ•Œλ‘œ λ³€κ²½λ˜λŠ” 무언가가 있기λ₯Ό 바라고 μžˆμ—ˆμ§€λ§Œ μ•„λ‹ˆμš”.


μ§€κΈˆκΉŒμ§€λŠ” μœ μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μœ„μ˜ 아이디어 (pty, ssh)λ₯Ό ν…ŒμŠ€νŠΈν•˜μ—¬ λ³€κ²½ 사항을 ν™•μΈν•˜μ‹­μ‹œμ˜€.


2011-07-23 08:46 pm EDT

Jeff Forcier ( bitprophet )λŠ” λ‹€μŒκ³Ό 같이 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.


pty=False 을 μ‚¬μš©ν•˜λ©΄ 훨씬 더 잘 μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€ (# 350의 Max의 μ„€λͺ…μ—μ„œ μ•Œ 수 μžˆλ“―μ΄). κΈ°λ³Έ True 섀정을 μ‚¬μš©ν•˜λ©΄ λŒ€λž΅ 5/10 회, λ•Œλ‘œλŠ” λͺ‡ 번 정도 μ‹€νŒ¨κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. Falseλ₯Ό μ‚¬μš©ν•˜λ©΄ μ‹€νŒ¨μ—†μ΄ μ•½ 15 번 연속 μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. ν†΅κ³„ν•™μžλŠ” μ•„λ‹ˆμ§€λ§Œ 그것은 λ‚˜μ—κ²Œ κ½€ 쒋은 것 κ°™μŠ΅λ‹ˆλ‹€.

ssh λ₯Ό μˆ˜λ™μœΌλ‘œ μ‹€ν–‰ν•˜λ©΄ λΉ„μŠ·ν•œ κ²°κ³Όκ°€ μƒμ„±λ©λ‹ˆλ‹€. ssh -t <host> sudo /etc/init.d/apache2 start λŠ” μ•½ 50 %의 μ‹œκ°„ λ™μ•ˆ Apacheλ₯Ό μžλ™μœΌλ‘œ μ‹œμž‘ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€. -T (pty μ—†μŒ)κ³Ό λ™μΌν•˜λ©° 100 % μ‹œμž‘λ©λ‹ˆλ‹€.

κ·Έλž˜μ„œ 이것은 Fabric의 잘λͺ»μ΄ μ•„λ‹™λ‹ˆλ‹€. SSH μŠ€νƒ€μΌ pseudo-ttyκ°€ μž‘λ™ ν•  λ•Œ μ΄λŸ¬ν•œ init μŠ€ν¬λ¦½νŠΈκ°€ μ˜€μž‘λ™ν•˜λŠ” 더 κΉŠμ€ κ³³μž…λ‹ˆλ‹€.


ν˜ΈκΈ°μ‹¬μ„ μœ„ν•΄ 쑰금 더 깊이 νŒŒν—€μ³ λ³΄κ² μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 여기에 "ν•΄κ²°μ±…"이이 λ¬Έμ œκ°€ λ°œμƒν–ˆμ„ λ•Œ pty=False λ₯Ό μ‚¬μš©ν•˜λΌλŠ” μƒˆλ‘œμš΄ FAQ 인 κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.


2011-07-23 08:59 pm EDT

Jeff Forcier ( bitprophet )λŠ” λ‹€μŒκ³Ό 같이 κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.


λ„€, λΆˆν–‰νžˆλ„μ΄ 행동을 μ„€λͺ…ν•˜λŠ” 것을 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ κ²°κ³Όλ₯Ό κ°μ•ˆν•  λ•Œ FAQκ°€ ν™•μ‹€νžˆ 갈 길이라고 μƒκ°ν•©λ‹ˆλ‹€.


2011-07-23 μ˜€ν›„ 10:35 EDT

Hugo Garza (hiro2k) κ²Œμ‹œ :


μ–΄μ œ 방금이 문제λ₯Ό λ§Œλ‚¬λŠ”λ°,이 버그λ₯Ό λ³΄μ•˜ 으면 μ’‹κ² μŠ΅λ‹ˆλ‹€. λ‹€ν–‰νžˆλ„ pty = False 섀정을 μ‹œλ„ν–ˆλŠ”λ° 잘 μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€. μ„€λͺ… ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 적어도 직물 결함이 μ•„λ‹™λ‹ˆλ‹€. 이제 μ™œ 이것이 μ‹€νŒ¨ν•˜λŠ”μ§€ κΆκΈˆν•΄ν•©λ‹ˆλ‹€.


2011-08-02 에 01:27 pm EDT

이것이 단지 bash 슀크립트 λ¬Έμ œκ°€ μ•„λ‹ˆλΌκ³  ν™•μ‹ ν•©λ‹ˆκΉŒ? λ‚΄ 메일 링리슀트 μŠ€λ ˆλ“œλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. Java와 weblogic을 μ‹œμž‘ν•œ bash 슀크립트 μΌλΏμž…λ‹ˆλ‹€.

FWIW, EC2μ—μ„œ νšŒμ „ν•˜λŠ” 거의 λͺ¨λ“  Ubuntu μ»΄ν“¨ν„°μ—μ„œμ΄ λ”μ°ν•œ λ™μž‘μ΄ λ°œμƒν•©λ‹ˆλ‹€.

뢄리 된 ν™”λ©΄ screen -d -m someBackgroundTask 톡해 μ‹œμž‘λœ μž‘μ—…μœΌλ‘œλ„ μž¬ν˜„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

일반적으둜 pty=False κ°€ 문제λ₯Ό ν•΄κ²°ν•œλ‹€κ³  μ–ΈκΈ‰ν•΄μ•Όν•˜μ§€λ§Œ 그렇지 μ•Šμ€ 경우λ₯Ό λ³Έ 적이 μžˆμŠ΅λ‹ˆλ‹€.

@yuvadm -pty = False둜 λ¬Έμ œκ°€ ν•΄κ²°λ˜μ§€ μ•ŠλŠ” κ²½μš°μ—λ„ 일반 ssh λͺ…λ Ή (μœ„μ—μ„œ μ–ΈκΈ‰ ν•œλŒ€λ‘œ)을 μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό μž¬ν˜„ ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? λ‚΄κ°€ λ³Έ 것은 Fabric λ¬Έμ œκ°€ μ•„λ‹ˆλΌ SSH λ¬Έμ œμ΄μ§€λ§Œ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 상황이 μžˆλŠ”μ§€ μ•„λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

확인해야 ν•  ν₯미둜운 κ°λ„μž…λ‹ˆλ‹€. 이에 λŒ€ν•΄ λ‹€μ‹œ 연락 λ“œλ¦¬κ² μŠ΅λ‹ˆλ‹€.

이 문제λ₯Ό μž¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” Ubuntu 10.04.3 LTS이고 μ„œλ²„λŠ” "Ubuntu 8.04.4 LTS (μ„œλ²„)"μž…λ‹ˆλ‹€.
SSH ν΄λΌμ΄μ–ΈνŠΈλŠ” "OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 2009 λ…„ 3 μ›” 25 일"이고, ssh μ„œλ²„λŠ” "OpenSSH_4.7p1 Debian-8ubuntu1, OpenSSL 0.9.8g 2007 λ…„ 10 μ›” 19 일"μž…λ‹ˆλ‹€. νŒ¨λΈŒλ¦­μ€ "1.3.3 μ΅œμ’…"μž…λ‹ˆλ‹€.

λ¬Έμ œλŠ” pty = True 인 경우 100 %이고 pty = False 인 경우 μ‚¬λΌμ§‘λ‹ˆλ‹€.

λ‹€λ₯Έ μ„œλ²„μ— μ—°κ²°ν•˜λ©΄ pty = True 일 λ•Œ λ¬Έμ œκ°€ ν•­μƒμžˆλŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.

제 κ²½μš°μ—λŠ” ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ "nohup sleep 100> / tmp / xxx 2> & 1"μ΄λΌλŠ” 맀우 κ°„λ‹¨ν•œ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

λ‚˜λŠ” 이것에 λ¬Ό 렸으며 EC2μ—μ„œλ§Œ λ³΄μ˜€μŠ΅λ‹ˆλ‹€ (λ‚΄ Linodeμ—μ„œλŠ” 보지 λͺ»ν–ˆμ§€λ§Œ 100 % ν™•μ‹ ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€). pty = Falseλ₯Ό μ„€μ •ν•˜λ©΄ ν•΄κ²°λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œμ— μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€.
sudo둜 λͺ…령을 μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— tty = Falseλ₯Ό μ‚¬μš©ν•  μˆ˜μ—†λŠ” 상황이 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
>& /dev/null < /dev/null & μΆ”κ°€λŠ” 잘 μ‹€ν–‰λ˜μ§€λ§Œ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹œμž‘λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λͺ…λ Ή μ‹€ν–‰ 쀄 λ‹€μŒμ— μ ˆμ „ λͺ¨λ“œλ₯Ό μΆ”κ°€ν•˜λŠ” 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€ : nohup java -jar text.jar & sleep 5; exit 0

κ°μ‚¬ν•©λ‹ˆλ‹€ spodgruskiy,

κ·€ν•˜μ˜ 팁이 μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€.
λ‚˜λŠ” λ‹€μŒ λͺ…령을 μ‚¬μš©ν•˜μ—¬ fab tp start strom ν΄λŸ¬μŠ€ν„°λ₯Ό μž‘μ„±ν•˜λ €κ³  μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.

  1. run ( 'nohup ./bin/storm nimbus> & / dev / null </ dev / null &', pty = False)
  2. run ( 'nohup ./bin/storm nimbus> & / dev / null </ dev / null &')
  3. run ( "screen -d -m './bin/storm nimbus'", pty = False)
  4. run ( "|| screen -d -m './bin/storm nimbus'")

κ·ΈλŸ¬λ‚˜ κ·Έλ“€ 쀑 μ–΄λŠ 것도 μž‘λ™ν•˜μ§€ μ•Šμ•˜κ³  후광은 μ „ν˜€ μ‹œμž‘λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 무슨 일이 μžˆμ—ˆλŠ”μ§€ 이해가 μ•ˆ λΌμš”.
μ–΄μ¨Œλ“  κ³ λ§ˆμ›Œ.

수면 트릭 +1

requirettyκ°€μžˆλŠ” μ‹œμŠ€ν…œμ—μ„œ μž‘μ—…ν•˜λŠ” 데 ν•„μš”

sudo ( 'start service; sleep .5') λͺ¨λ“  것이 μž˜λ©λ‹ˆλ‹€!

'sudo ()'λ₯Ό μ‚¬μš©ν•˜κ³  원격 μ‹œμŠ€ν…œμ— sudo μ•‘μ„ΈμŠ€λ₯Ό μœ„ν•΄ RequireTtyκ°€ ν™œμ„±ν™” 된 경우 'set -m; μ„œλΉ„μŠ€start 'λ₯Ό μ‚¬μš©ν•˜μ—¬ SIGHUPκ°€ init μŠ€ν¬λ¦½νŠΈμ— μ˜ν•΄ μ‹œμž‘λœ ν”„λ‘œμ„ΈμŠ€λ‘œ μ „μ†‘λ˜μ§€ μ•Šλ„λ‘ν•©λ‹ˆλ‹€.

bash μΈν„°λž™ν‹°λΈŒ λŒ€ λΉ„ μΈν„°λž™ν‹°λΈŒμ— λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…κ³Ό 이것이 μž‘μ—… μ œμ–΄μ— λ―ΈμΉ˜λŠ” 영ν–₯에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ http://stackoverflow.com/a/14866774 λ₯Ό μ°Έμ‘°

κΆκΈˆν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ ssh λ¬Έμ œλŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

pty = falseλŠ” λ‚˜λ₯Ό μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€.

μ‹€μ œλ‘œ SSH λ¬Έμ œκ°€ μ•„λ‹ˆλ©° BASH λΉ„λŒ€ν™” ν˜• / λŒ€ν™” ν˜• λͺ¨λ“œ 및 ν”„λ‘œμ„ΈμŠ€ 그룹에 λŒ€ν•œ μ‹ ν˜Έ μ „νŒŒμ— λŒ€ν•œ λ―Έλ¬˜ν•œ λ™μž‘μž…λ‹ˆλ‹€.

λ‹€μŒμ€ http://stackoverflow.com/questions/14679178/why-does-ssh-wait-for-my-subshells-without-t-and-kill-them-with-t/14866774#14866774 및 httpλ₯Ό κΈ°λ°˜μœΌλ‘œν•©λ‹ˆλ‹€

pty / tty = 거짓

μ‹œμž‘λœ bash μ‰˜μ€ μ‹œμž‘λœ ν”„λ‘œμ„ΈμŠ€μ˜ stdout / stderr / stdin에 μ—°κ²°λ˜λ©° μ†ŒμΌ“μ— μ—°κ²°λœ ν•­λͺ©μ΄μ—†κ³  μžμ‹μ΄ μ’…λ£Œ 될 λ•ŒκΉŒμ§€ 계속 μ‹€ν–‰λ©λ‹ˆλ‹€. 쒋은 데λͺ¬ ν”„λ‘œμ„ΈμŠ€λŠ” μžμ‹μ΄ μ’…λ£Œ ν•  λ•ŒκΉŒμ§€ 기닀리지 μ•Šκ³  μžμ‹ ν”„λ‘œμ„ΈμŠ€λ₯Ό 포크 ν•œ λ‹€μŒ μ’…λ£Œν•˜μ§€ μ•Šλ„λ‘ν•©λ‹ˆλ‹€. 이 λͺ¨λ“œμ—μ„œλŠ” SSH에 μ˜ν•΄ ν•˜μœ„ ν”„λ‘œμ„ΈμŠ€μ— SIGHUPκ°€ μ „μ†‘λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 이것이 슀슀둜 μ•…λ§ˆ ν™”λ₯Ό μ²˜λ¦¬ν•˜κ³  λ°°κ²½ν™”ν•  ν•„μš”κ°€μ—†λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•˜λŠ” λŒ€λΆ€λΆ„μ˜ μŠ€ν¬λ¦½νŠΈμ—μ„œ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ ν•  것이라고 λ―ΏμŠ΅λ‹ˆλ‹€. init μŠ€ν¬λ¦½νŠΈκ°€ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ°±κ·ΈλΌμš΄λ“œν•˜κΈ° μœ„ν•΄ '&'λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, μ„Έμ…˜μ΄ μ’…λ£Œ 된 경우 SIGHUPλ₯Ό νŠΈλ¦¬κ±°ν•˜κΈ° λ•Œλ¬Έμ— λ°±κ·ΈλΌμš΄λ“œ ν”„λ‘œμ„ΈμŠ€κ°€ stdinμ—μ„œ 읽기λ₯Ό μ‹œλ„ν•˜λŠ”μ§€ μ—¬λΆ€κ°€ μ£Όμš” 문제 일 κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€.

pty / tty = μ°Έ *

init μŠ€ν¬λ¦½νŠΈκ°€ ν”„λ‘œμ„ΈμŠ€κ°€ μ‹œμž‘λœ 배경을 λ°°κ²½μœΌλ‘œν•˜λŠ” 경우 λΆ€λͺ¨ BASH 셸은 SSH 연결에 μ’…λ£Œ μ½”λ“œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 그러면 μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œ 될 λ•ŒκΉŒμ§€ 기닀리지 μ•Šκ³  stdoutμ—μ„œ μ°¨λ‹¨λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ¦‰μ‹œ μ’…λ£Œλ˜λŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€. / stderr / stdin. μ΄λ ‡κ²Œν•˜λ©΄ SIGHUPκ°€ λΆ€λͺ¨ bash μ…Έ ν”„λ‘œμ„ΈμŠ€ 그룹으둜 μ „μ†‘λ©λ‹ˆλ‹€. bash의 λΉ„λŒ€ν™” ν˜• λͺ¨λ“œμ—μ„œ μž‘μ—… μ œμ–΄κ°€ λΉ„ν™œμ„±ν™”λ˜μ—ˆμœΌλ―€λ‘œ 방금 μ‹œμž‘ν•œ μžμ‹ ν”„λ‘œμ„ΈμŠ€κ°€ ν¬ν•¨λ©λ‹ˆλ‹€. 데λͺ¬ ν”„λ‘œμ„ΈμŠ€κ°€ λΆ„κΈ°λ˜κ±°λ‚˜ λΆ„κΈ° 된 ν”„λ‘œμ„ΈμŠ€μ—μ„œ μƒˆ ν”„λ‘œμ„ΈμŠ€ μ„Έμ…˜μ„ λͺ…μ‹œ 적으둜 μ‹œμž‘ν•˜λŠ” 경우 ν•΄λ‹Ή λ˜λŠ” ν•΄λ‹Ή μžμ‹μ€ μ’…λ£Œλ˜λŠ” BASH λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€μ—μ„œ SIGHUPλ₯Ό μˆ˜μ‹ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 SIGTERM이 ν‘œμ‹œλ˜λŠ” μΌμ‹œ 쀑지 된 μž‘μ—…κ³Ό λ‹€λ¦…λ‹ˆλ‹€.

λ‚˜λŠ” 이것에 λŒ€ν•œ λ¬Έμ œκ°€ λ•Œλ•Œλ‘œ μ•½κ°„μ˜ 경쟁 쑰건과 관련이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. deamonizing에 λŒ€ν•œ ν‘œμ€€ μ ‘κ·Ό 방식을 μ‚΄νŽ΄λ³΄λ©΄ http://www.itp.uzh.ch/~dpotter/howto/daemonize μ½”λ“œμ—μ„œ μƒˆ μ„Έμ…˜μ΄ λΆ„κΈ° 된 ν”„λ‘œμ„ΈμŠ€μ— μ˜ν•΄ μƒμ„±λœλ‹€λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. μƒμœ„κ°€ μ’…λ£Œλ˜κΈ° 전에 μ‹€ν–‰λ˜λ―€λ‘œ μœ„μ—μ„œ μ–ΈκΈ‰ ν•œ μž„μ˜μ˜ 성곡 / μ‹€νŒ¨ λ™μž‘μ΄ λ°œμƒν•©λ‹ˆλ‹€. sleep 문은 λΆ„κΈ° 된 ν”„λ‘œμ„ΈμŠ€κ°€ μƒˆ μ„Έμ…˜μ„ μƒμ„±ν•˜λŠ” 데 μΆ©λΆ„ν•œ μ‹œκ°„μ„ ν—ˆμš©ν•˜λ―€λ‘œ 일뢀 κ²½μš°μ— μž‘λ™ν•©λ‹ˆλ‹€.

pty / tty = true 및 μž‘μ—… μ œμ–΄κ°€ bashμ—μ„œ λͺ…μ‹œ 적으둜 ν™œμ„±ν™” 됨

SSHλŠ” bash μ…Έμ˜ stdout / stderr / stdin λ˜λŠ” μ‹œμž‘λœ μžμ‹ ν”„λ‘œμ„ΈμŠ€μ— μ—°κ²°λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉, λΆ€λͺ¨ bash 셸이 μš”μ²­ 된 λͺ…λ Ή 싀행을 μ™„λ£Œν•˜μžλ§ˆμž μ’…λ£Œλ©λ‹ˆλ‹€. 이 경우 μž‘μ—… μ œμ–΄κ°€ λͺ…μ‹œ 적으둜 ν™œμ„±ν™” 된 μƒνƒœμ—μ„œ '&'λ₯Ό μ‚¬μš©ν•˜μ—¬ bash μ‰˜μ— μ˜ν•΄ μ‹œμž‘λœ λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€λŠ” μ¦‰μ‹œ λ³„λ„μ˜ μ„Έμ…˜μ— 배치되며 BASH μ„Έμ…˜μ— λŒ€ν•œ μƒμœ„ ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œ 될 λ•Œ SIGHUP μ‹ ν˜Έλ₯Ό μˆ˜μ‹ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ ( 이 경우 SSH μ—°κ²°).

μˆ˜μ •μ— ν•„μš”ν•œ 사항

μ†”λ£¨μ…˜μ€ λ°±κ·ΈλΌμš΄λ“œ ν”„λ‘œμ„ΈμŠ€ / μ„œλΉ„μŠ€λ‘œ μž‘μ—… ν•  λ•Œ νŠΉλ³„ν•œ 경우둜 run / sudo μž‘μ—… λ¬Έμ„œμ— λͺ…μ‹œ 적으둜 μ–ΈκΈ‰λ˜μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 기본적으둜 'pty = false'λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ λΆˆκ°€λŠ₯ν•œ 경우 첫 번째 λͺ…λ ΉμœΌλ‘œ μž‘μ—… μ œμ–΄λ₯Ό λͺ…μ‹œ 적으둜 ν™œμ„±ν™”ν•˜λ©΄ λ™μž‘μ΄ 올 λ°”λ¦…λ‹ˆλ‹€.

링크 μ—…λ°μ΄νŠΈ : http://www.ics.uzh.ch/~dpotter/howto/daemonize

λ‚΄κ°€ μ—¬κΈ°μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ fabrickit (패브릭 라이브러리의 래퍼) https://github.com/HyukjinKwon/fabrickit/commit/cceb8bfb8f960a3ac41b24c64b8358bd6e7a0366

νŠΉμ • κ΅¬μ„±μ΄λ‚˜ 섀정없이 ν”„λ‘œκ·Έλž¨μ„ 데λͺ¬μœΌλ‘œ μ ˆλŒ€ μ‰½κ²Œ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ–΄μ¨Œλ“  이것은 μΌμ’…μ˜ μ…Έ μ‹€ν–‰μ΄λ―€λ‘œ 셸이 ν•  μˆ˜μžˆλŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 방법이 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

이 μ‹œλ„:

run("sh -c '((nohup %s > /dev/null 2> /dev/null) & )'" % cmd, pty=False)

λ‚˜λŠ” 이것을 μ‹œλ„ν–ˆκ³  데λͺ¬μœΌλ‘œ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ μΆ”κ°€ ν”„λ‘œκ·Έλž˜λ°μ„ κ΅¬ν˜„ν•˜μ§€ μ•Šμ•„λ„ μ™„λ²½ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€ (while 루프 λ‚΄μ—μ„œ 'Hello'λ₯Ό μž‘μ„±ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ‘°μ°¨λ„ 잘 μž‘λ™ν•©λ‹ˆλ‹€).

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