IRCã§ããã«ã€ããŠè€æ°ã®å ±åããããïŒ350ã«ã€ããŠã®ã³ã¡ã³ãããããçŸåšã¯ã¡ãŒãªã³ã°ãªã¹ãã®ã¹ã¬ããã§ãã
æ確ãªåå ã¯ãŸã ãããŸãããäœåºŠãå ±åãããŠããŸããããããåžžã«åé¡ã§ãããšã¯æããªãããããã«ã€ããŠãã£ãšå€ãã®ããšãèãã§ãããã ãããŸã§ã®ç§ã®åŽã®ããã€ãã®éåžžã«éããããã¹ãã§ã¯ããããã30ã50ïŒ ã®ç¢ºçã§åé¡ãåçŸã§ããŸãããåçŸå¯èœã§ãã
çç¶ã¯ãããŒã¢ã³ã®èµ·åãšçŽåŸã®åŸ©åž°ãæ åœããinitã¹ã¿ã€ã«ã®ã¹ã¯ãªããããOKãè¿ããã³ãŒã0ãè¿ãããæåãã¹ããŒã¿ã¹ã¡ãã»ãŒãžãstdoutã«åºåãããããšã§ãããå®éã«ã¯åé¡ã®ããŒã¢ã³ãèµ·åããŸããã
ç§ã®å人çãªãã¹ãã¯ãUbuntu 10.04ïŒLucidïŒVMãšã¹ããã¯Apache2ããã±ãŒãžã®initã¹ã¯ãªããã察象ãšããææ°ã®ãã¹ã¿ãŒãä»ããŠè¡ãããŸããã
ããšããšãžã§ãForcierïŒããæåºãbitprophetäžæ25åååŸEDTã§2011幎7æ23æ¥ã«ïŒ
Jeff Forcier ïŒ bitprophet ïŒãæçš¿ããŸããïŒ
ç§ããã¹ãããŠããinitã¹ã¯ãªãããã€ã³ã¹ãã«ã¡ã³ãåããŸãããããã¹ãŠãåãããã«å®è¡ãããŠããããã§ãïŒã€ãŸããå®éã®æåãŸãã¯åœã®æåã·ããªãªïŒãããã¯ãã¹ã¯ãªããèªäœãè¡ãapachectl
åŒã³åºãã®ç¯å²å
ã«åé¡ãããããšãæå³ããŸãã
åå ãç§ãã¡ã®åŽã«ããå¯èœæ§ãããããšã«ã€ããŠèãå§ããŸãïŒ
ssh -t <hostname> <command>
ã䜿çšããŠãããã§ãåé¡ãåçŸããããã©ããã確èªããããšã§ãã2011幎7æ23æ¥ååŸ7æ45åEDT
Jeff Forcier ïŒ bitprophet ïŒãæçš¿ããŸããïŒ
apache2ctl
èªäœãã /usr/sbin/apache2
åŒã³åºãã©ãããŒBashã¹ã¯ãªããã§ããããã¯ãApachempm-workerã®ã€ã³ã¹ããŒã«å Žæã«ããå®éã®ãã€ããªå®è¡å¯èœãã¡ã€ã«ãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ãã å
·äœçã«ã¯ãéåžžã®start
䜿çšæ³ã§ã¯ã /usr/sbin/apache2 -k start
åŒã³åºããŸãã 以åãšåæ§ã«ã apache2ctl
ã¯ã2ã€ã®ç°ãªãã·ããªãªïŒreïŒæ»ãå€ãŸãã¯å®è¡ãããã»ã¯ã·ã§ã³ïŒã§ç°ãªãåäœãããããã«ã¯èŠããŸããã
/usr/sbin/apache2
ã®ããã¥ã¡ã³ãã¯ïŒApacheã®ãµã€ãã§ãïŒæ¯èŒçå¶éãããŠãããapachectlã䜿çšããŠenvå€æ°ãèšå®ããå¿
èŠãããããšã ããè¿°ã¹ãŠããŸãïŒæ£ç¢ºã§ã- apache2
å®è¡ããã ãã§ããªãããŸããããŸãæããã«ããããã®å€æ°ãèšå®ãããŠããªãããšã«é¢ãããšã©ãŒããããŸããïŒ
apache2ctl
ãapache2
ãåŒã³åºãçŽåã«ã env
ã®åºåã調ã¹ããšããŠãŒã¶ãŒãã°ã«ãŒããpidfileã®å Žæãèšèªã®ããã€ãã®é
ç®ããåŸãããŸããã ãããã¯ãæåç¶æ³ãšå€±æç¶æ³ã®éã§å€åããŸããã ã©ãããŒã®ããŸããŸãªãœãŒã·ã³ã°ãšenvvarèšå®ã«ãæã
å€æŽãããäœããããããšãæåŸ
ããŠããŸããããããã§ã¯ãããŸããã§ããã
ãããŸã§ã®ãšãããããã¯ã©ãã«ã圹ç«ã¡ãŸããã äžèšã®ã¢ã€ãã¢ïŒptyãsshïŒããã¹ãããŠãããã§äœãå€ãããã確èªããŸãã
2011幎7æ23æ¥ååŸ8æ46å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ïŒ
ã®æéã§éå§ããŸãã
ãããã£ãŠãããã¯ãã¡ããªãã¯ã®ããã§ã¯ãããŸããã ããã¯ãSSHã¹ã¿ã€ã«ã®pseudo-ttyãæ©èœããŠãããšãã«ããããã®initã¹ã¯ãªããã誀åäœãããšããããæ·±ããã®ã§ãã
奜å¥å¿ã®ããã«ããå°ãæ·±ãæãäžããŸãããããã§ã®ã解決çãã¯ããã®åé¡ãçºçãããšãã«pty=False
ã䜿çšããããšã瀺ãæ°ããFAQã®ããã§ãã
2011幎7æ23æ¥ååŸ8æ59åEDT
Jeff Forcier ïŒ bitprophet ïŒãæçš¿ããŸããïŒ
æ®å¿µãªããããã®åäœã説æãããã®ã¯äœãèŠã€ãããŸããã§ããã äžèšã®èª¿æ»çµæãèãããšãFAQã¯ééããªãé²ãã¹ãéã ãšæããŸãã
2011幎7æ23æ¥ååŸ10æ35åEDT
Hugo Garza ïŒhiro2kïŒã®æçš¿ïŒ
æšæ¥ããã«ééããã°ããã§ãããã®ãã°ã衚瀺ãããŠããã°ããã£ãã®ã§ããã幞éã«ãpty = Falseãèšå®ããŠã¿ããšãããããŸããããŸããã 説æãããããšããå°ãªããšãããã¯çå°ã®ããã§ã¯ãããŸããã ä»ãããªãã¯æ¬åœã«ããããªã倱æããã®ãçåã«æã£ãŠããŸãã
1æ27åååŸEDTã§2011-08-02ã«
ããã¯bashã¹ã¯ãªããã®åé¡ã ãã§ã¯ãããŸãããïŒ ç§ã®ã¡ãŒãªã³ã°ãªã¹ãã®ã¹ã¬ãããæå³ããŸãã ãããã¯ãjavaãšweblogicãéå§ããåãªãbashã¹ã¯ãªããã§ããã
FWIWãEC2ã§èµ·åããã»ãšãã©ãã¹ãŠã®Ubuntuãã·ã³ã§ãã®æãããåäœãçºçããŠããŸãã
ãŸããåãé¢ãããç»é¢screen -d -m someBackgroundTask
ä»ããŠèµ·åãããã¿ã¹ã¯ã§ãåçŸå¯èœã§ãã
éåžžã¯pty=False
ã§åé¡ã解決ããŸãããããã§ãªãå ŽåããããŸãã
@ yuvadm -pty = Falseã§åé¡ã解決ããªãå Žåã§ããéåžžã®sshã³ãã³ãïŒäžèšã®ãšããïŒã䜿çšããŠåé¡ãåçŸã§ããŸããïŒ ç§ãèŠãéãã§ã¯ãããã¯SSHã®åé¡ã§ãããFabricã®åé¡ã§ã¯ãããŸããããäžèŽããªãç¶æ³ããããã©ãããç¥ã£ãŠãããšããã§ãããã
ããã¯ãã§ãã¯ããã®ã«èå³æ·±ãè§åºŠã§ããç§ã¯ããã«ã€ããŠããªãã«æ»ããŸã...
ç§ã¯ãã®åé¡ãåçŸããŸããã ã¯ã©ã€ã¢ã³ãã¯Ubuntu10.04.3 LTSããµãŒããŒã¯ãUbuntu 8.04.4 LTSïŒãµãŒããŒïŒãã§ãã
SSHã¯ã©ã€ã¢ã³ãã¯ãOpenSSH_5.3p1Debian-3ubuntu7ãOpenSSL 0.9.8k 2009幎3æ25æ¥ããsshãµãŒããŒã¯ãOpenSSH_4.7p1Debian-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 stromclusterãäœæããŠã¿ãŸããã
ãããããããã®ã©ããæ©èœããããã³ãã¹ã¯ãŸã£ããèµ·åããŸããã§ããã äœãèµ·ãã£ãã®ãããããŸããã
ãšããããããããšãã
ç¡ç ããªãã¯ã®+1
requirettyãåããã·ã¹ãã ã§äœæ¥ããå¿ èŠããããŸã
sudoïŒ 'ãµãŒãã¹ã®éå§; sleep .5'ïŒãããŠãã¹ãŠãé 調ã§ãïŒ
'sudoïŒïŒ'ã䜿çšããŠããŠããªã¢ãŒãã·ã¹ãã ã§sudoã¢ã¯ã»ã¹ã«å¯ŸããŠRequireTtyãæå¹ã«ãªã£ãŠããå Žåã¯ã 'set-m;ã䜿çšã§ããŸãã ãµãŒãã¹
bashã€ã³ã¿ã©ã¯ãã£ããšéã€ã³ã¿ã©ã¯ãã£ãã®è©³çŽ°ãªèª¬æãšãããããžã§ãå¶åŸ¡ã«ã©ã®ããã«åœ±é¿ãããã«ã€ããŠã¯ã httpïŒ//stackoverflow.com/a/14866774ãåç §ããŠ
ç§ã¯èå³ããããŸããããã§ã®sshã®åé¡ã¯äœã§ããïŒ
pty = falseã¯ç§ã®ããã«åããŸã
ããã¯å®éã«ã¯SSHã®åé¡ã§ã¯ãªããBASHã®é察話å/察話åã¢ãŒãããã³ããã»ã¹ã°ã«ãŒããžã®ä¿¡å·äŒæ¬ã«é¢ãã埮åŠãªåäœã§ãã
以äžã¯ã httpïŒ //stackoverflow.com/questions/14679178/why-does-ssh-wait-for-my-subshelââls-without-t-and-kill-them-with-t/14866774#14866774ããã³httpã«åºã¥ããŠã
èµ·åãããbashã·ã§ã«ã¯ãéå§ãããããã»ã¹ã®stdout / stderr / stdinã«æ¥ç¶ãããœã±ããã«äœãæ¥ç¶ãããŠãããããã®åãçµäºãããŸã§å®è¡ããç¶ããŸãã åªããããŒã¢ã³ããã»ã¹ã¯ãåããã»ã¹ãçµäºããã®ãåŸ ããã«ãåããã»ã¹ãforkããŠããçµäºããããšãä¿èšŒããŸãã ãã®ã¢ãŒãã§ã¯ãSSHã«ãã£ãŠSIGHUPã¯åããã»ã¹ã«éä¿¡ãããŸããã ããã¯ãããèªäœã®ããŒã¢ã³åãåŠçããããã»ã¹ãå®è¡ããã»ãšãã©ã®ã¹ã¯ãªããã§æ£ããæ©èœããããã¯ã°ã©ãŠã³ãã§å®è¡ããå¿ èŠã¯ãªããšæããŸãã initã¹ã¯ãªããããïŒãã䜿çšããŠããã»ã¹ãããã¯ã°ã©ãŠã³ãã§åŠçããå Žåãã»ãã·ã§ã³ãçµäºãããšSIGHUPãããªã¬ãŒããããããããã¯ã°ã©ãŠã³ãåŠçãããããã»ã¹ãstdinããã®èªã¿åããè©Šã¿ããã©ãããäž»ãªåé¡ã«ãªãå¯èœæ§ããããŸãã
initã¹ã¯ãªãããããã»ã¹ã®éå§ãããã¯ã°ã©ãŠã³ãã§å®è¡ããå Žåã芪BASHã·ã§ã«ã¯SSHæ¥ç¶ã«çµäºã³ãŒããè¿ããŸããSSHæ¥ç¶ã¯ãåããã»ã¹ã®çµäºãåŸ æ©ããŠããããstdoutã§ãããã¯ãããŠããªããããããã«çµäºããããã«èŠããŸãã / stderr / stdinã ããã«ãããSIGHUPã芪bashã·ã§ã«ããã»ã¹ã°ã«ãŒãã«éä¿¡ãããŸããããã¯ãbashã®é察話åã¢ãŒãã§ãžã§ãå¶åŸ¡ãç¡å¹ã«ãªã£ãŠãããããèµ·åãããã°ããã®åããã»ã¹ãå«ãŸããŸãã ããŒã¢ã³ããã»ã¹ããã©ãŒã¯æã«ããŸãã¯ãã©ãŒã¯ãããããã»ã¹ã§æ°ããããã»ã¹ã»ãã·ã§ã³ãæ瀺çã«éå§ããå ŽåãããŒã¢ã³ããã»ã¹ãŸãã¯ãã®åã¯ãçµäºããBASH芪ããã»ã¹ããSIGHUPãåä¿¡ããŸããã ããã¯ãSIGTERMã衚瀺ãããäžæããããžã§ããšã¯ç°ãªãããšã«æ³šæããŠãã ããã
ããã«é¢ããåé¡ã¯ãããããªç«¶åç¶æ ã«é¢ä¿ããŠããå ŽåããããšæããŸãã ããŒã¢ã³åã®æšæºçãªã¢ãããŒãïŒ http://www.itp.uzh.ch/~dpotter/howto/daemonize ïŒãèŠããšãã³ãŒãå ã§æ°ããã»ãã·ã§ã³ããã©ãŒã¯ãããããã»ã¹ã«ãã£ãŠäœæãããŠããããšãããããŸãã芪ãçµäºããåã«å®è¡ãããããäžèšã®ã©ã³ãã ãªæå/倱æã®åäœãçºçããŸãã ã¹ãªãŒãã¹ããŒãã¡ã³ãã¯ããã©ãŒã¯ãããããã»ã¹ãæ°ããã»ãã·ã§ã³ãäœæããã®ã«ååãªæéãèš±å¯ããŸãããã®ãããå Žåã«ãã£ãŠã¯æ©èœããŸãã
SSHã¯ãbashã·ã§ã«ã®stdout / stderr / stdinãŸãã¯èµ·åãããåããã»ã¹ã«æ¥ç¶ããŸãããã€ãŸãã芪bashã·ã§ã«ãèŠæ±ãããã³ãã³ãã®å®è¡ãçµäºãããšããã«çµäºããŸãã ãã®å Žåããžã§ãå¶åŸ¡ãæ瀺çã«æå¹ã«ãªã£ãŠãããšãããã¯ã°ã©ãŠã³ããšããŠãïŒãã䜿çšããŠbashã·ã§ã«ã«ãã£ãŠèµ·åãããããã»ã¹ã¯ãããã«å¥ã®ã»ãã·ã§ã³ã«é 眮ãããBASHã»ãã·ã§ã³ã®èŠªããã»ã¹ãçµäºãããšãã«SIGHUPã·ã°ãã«ãåä¿¡ããŸããïŒãã®å Žåã®SSHæ¥ç¶ïŒã
ããã¯ã°ã©ãŠã³ãããã»ã¹/ãµãŒãã¹ã䜿çšããå Žåã®ç¹æ®ãªã±ãŒã¹ãšããŠãrun / sudoæäœã®ããã¥ã¡ã³ãã«ãœãªã¥ãŒã·ã§ã³ãæ瀺çã«èšèŒããå¿ èŠããããšæããŸãã åºæ¬çã«ããpty = falseãã䜿çšãããããããäžå¯èœãªå Žåã¯ãæåã®ã³ãã³ããšããŠãžã§ãå¶åŸ¡ãæ瀺çã«æå¹ã«ãããšãåäœã¯æ£ãããªããŸãã
ãªã³ã¯ã®æŽæ°ïŒ http ïŒ
ããã§è¿°ã¹ãããã«ãfabrickitïŒãã¡ããªãã¯ã©ã€ãã©ãªã®ã©ãããŒïŒ https://github.com/HyukjinKwon/fabrickit/commit/cceb8bfb8f960a3ac41b24c64b8358bd6e7a0366
ç¹å®ã®æ§æãèšå®ããªããŠããããã°ã©ã ãããŒã¢ã³ãšããŠç°¡åã«èµ·åã§ããŸãã
ããã¯ãšã«ããäžçš®ã®ã·ã§ã«å®è¡ã§ãããããã·ã§ã«ãå®è¡ã§ããããšãå®è¡ããæ¹æ³ãããã¯ãã§ãã
ãããè©ŠããŠïŒ
run("sh -c '((nohup %s > /dev/null 2> /dev/null) & )'" % cmd, pty=False)
ç§ã¯ãããè©ŠããŸããããããŒã¢ã³ãšããŠå®è¡ããããã®è¿œå ã®ããã°ã©ãã³ã°ãå®è£ ããŠããªããŠããå®å šã«æ£åžžã«åäœããŸãïŒwhileã«ãŒãå ã«ãHelloããæžã蟌ãããã°ã©ã ã§ãæ£åžžã«åäœããŸãïŒã
æãåèã«ãªãã³ã¡ã³ã
ã¡ããã©ãã®åé¡ã«çŽé¢ããŸããã
sudoã䜿çšããŠã³ãã³ããå®è¡ãããããtty = Falseã䜿çšã§ããªãç¶æ³ãçºçããŸããã
>& /dev/null < /dev/null &
è¿œå ã¯æ£åžžã«å®è¡ãããŸãããããã»ã¹ã¯éå§ãããŸããã§ãããã³ãã³ãå®è¡è¡ã®åŸã«ã¹ãªãŒããè¿œå ããéã®åé¡ã解決ããŸããïŒ
nohup java -jar text.jar & sleep 5; exit 0