рдПрдХ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЗ рд░реВрдк рдореЗрдВ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЬреЗрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯ, рд╕реНрдЯреЙрдк, рд░рд┐рд╕реНрдЯрд╛рд░реНрдЯ рдЬреИрд╕реА рд╕рднреА рдЕрдЪреНрдЫрд╛рдЗрдпрд╛рдВ рд╣реИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдореЙрдиреЗрдЯ + рдЗрдирд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдХрд╕рд╛рддрд╛ рд╣реИ, рдпрд╛ "рдиреЙрдбрдорди, рд▓реНрдпреВрдХ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬреИрд╕реА рдЫреЛрдЯреА рдпреБрдХреНрддрд┐рдпрд╛рдВред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ FreeBSD рдкрд░ рдПрдХ рдорд╢реАрди рдереАред рдПрдХ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдЖрдпрд╛ред рдпрд╣ рдЪреАрдЬ, рдиреЛрдбреЗрдо рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕рдХреЗ рддрд╣рдд рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд░реЛрдд рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╣ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдврд╝рд╛рддреА рд╣реИ, рдЬреЛ рдЙрддреНрдкрд╛рджрди рдкрд░ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрд╢рд╛ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдЕрдкрдЯрд╛рдЗрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдФрд░ рдЖрдкрдХреЛ рдирд╛рдо рдпрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ / рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, rc.d рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЧрдИ:
# рдмрд┐рд▓реНрд▓реА /usr/local/etc/rc.d/factory
#!/bin/sh # PROVIDE: factory # REQUIRE: NETWORKING SERVERS DAEMON # BEFORE: LOGIN # KEYWORD: shutdown . /etc/rc.subr name="factory" forever="/usr/local/bin/node /usr/local/bin/forever" workdir="/usr/home/www/factory" script="index.js" rcvar=`set_rcvar` start_cmd="start" stop_cmd="stop" restart_cmd="restart" load_rc_config $name eval "${rcvar}=\${${rcvar}:-'NO'}" start() { HOME=/root NODE_ENV=production ${forever} start -a -l /var/log/forever.log -o /dev/null -e ${workdir}/logs/node_err.log --sourceDir ${workdir} ${workdir}/node/${script} } stop() { ${forever} stop ${workdir}/node/${script} } restart() { ${forever} restart ${workdir}/node/${script} } run_rc_command "$1"
/Etc/rc.conf: factory_enable = "YES" рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реА рдЧрдИред рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдПрдХ рдЯреНрд░рд╛рдпрд▓ рд░рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛: /usr/local/etc/rc.d/factory рд╢реБрд░реБрдЖрдд рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреБрд╢реА рд╕реЗ рд╢реБрд░реВ рд╣реБрдИред рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рдХрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдФрд░ рд╕рд╛рде рд╣реА рд░реБрдХрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЦреБрдж рд╕реЗ рдЦреБрд╢ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдореИрдВ рдЦреБрдж рдЬрд╛рдКрдБ рдФрд░ рдЦреБрдж рдЪрд╛рдп рдкреАрдКрдБред рдЙрд╕реА рд╕рдордп, рдореБрдХрд╛рдмрд▓рд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡рд░ рднреЗрдЬрд╛ред
рдЪрд╛рдп рдХреЗ рд╕рд╛рде рд▓реМрдЯрдХрд░, рдореИрдВрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЦреЛрд▓рд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рд╕рд░реНрд╡рд░рд╕рд╛рдЗрдб рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рдереЗ:
# cat /var/log/forever.log ... warn: Forever restarting script for 11119 time warn: Forever detected script exited with code: 127 warn: Forever restarting script for 11120 time warn: Forever detected script exited with code: 127 warn: Forever restarting script for 11121 time warn: Forever detected script exited with code: 127 warn: Forever restarting script for 11122 time warn: Forever detected script exited with code: 127 warn: Forever restarting script for 11123 time warn: Forever detected script exited with code: 127 warn: Forever restarting script for 11124 time
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрд┐рд╕ рд╕рдордп рд╕реЗ рд╕реЗрд╡рд╛ "рд╢реБрд░реВ" рд╣реБрдИ, рдмрдЪреНрдЪреЗ рдЬреЗрдПрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА 11124 рдмрд╛рд░ рдЧрд┐рд░рд╛рд╡рдЯ / рд╡реГрджреНрдзрд┐ рд╣реБрдИ, рдЬрдмрдХрд┐ рдореИрдВ рдЙрдмрд▓рддреЗ рдкрд╛рдиреА рдореЗрдВ рдЯреА рдмреИрдЧ рдХреЛ рдЧрд░реНрдо рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдЬрдм рднреА рдХреБрдЫ рдХрдВрд╕реЛрд▓ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рд╕реНрд╡рдЪреНрдЫ" рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдВрддрд░рд┐рдХ рдЖрд╡рд╛рдЬ рдПрдХ рд╣реА рдмрд╛рдд рдХрд░рддреА рд╣реИ: "рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░!" рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреИрд╕реЗ? рдореИрдВрдиреЗ рдЙрд╕ рдШрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд░ рдХреЛрдИ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдФрд░ NODE_ENV = рдЙрддреНрдкрд╛рджрди рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдкрдХреЛ рдФрд░ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?
рдФрд░ рдЖрдкрдХреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рддреБрд▓рдирд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, rc.d рд╕реНрдХреНрд░рд┐рдкреНрдЯ: USER, PATH рдФрд░ PWD: рдореЗрдВ "рд╕реНрдЯрд╛рд░реНрдЯ" рд╕реЗрдХреНрд╢рди рдореЗрдВ рддреАрди рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдЬреЛрдбрд╝реЗ рдЧрдПред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЬреЗрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реБрдИред рдЕрд╕рд▓ рдореЗрдВ rc.d рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╡рд░реНрдХрд┐рдВрдЧ рд╡рд░реНрдЬрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧрд╛:
#!/bin/sh # PROVIDE: factory # REQUIRE: NETWORKING SERVERS DAEMON # BEFORE: LOGIN # KEYWORD: shutdown . /etc/rc.subr name="factory" forever="/usr/local/bin/node /usr/local/bin/forever" workdir="/usr/home/www/factory" script="index.js" rcvar=`set_rcvar` start_cmd="start" stop_cmd="stop" restart_cmd="restart" load_rc_config $name eval "${rcvar}=\${${rcvar}:-'NO'}" start() { USER=root PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin PWD=/root HOME=/root NODE_ENV=production ${forever} start -a -l /var/log/forever.log -o /dev/null -e ${workdir}/logs/node_err.log --sourceDir ${workdir} ${workdir}/node/${script} } stop() { ${forever} stop ${workdir}/node/${script} } restart() { ${forever} restart ${workdir}/node/${script} } run_rc_command "$1"
"рдпреЗ рдЖрдкрдХреЗ рдЗрдВрдЯрд░рдиреЗрдЯ" рдореЗрдВ рдЕрдлрд╡рд╛рд╣ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ FreeBSD рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рдорд╢реАрди рдкрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдиреЛрдб.рдЬреЗрдПрд╕ рд╕реЗрд╡рд╛ рдХреА рдЕрд╕рдлрд▓-рд╕реБрд░рдХреНрд╖рд┐рдд рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдХрдореА рдкрд░ рд╣реИрд░рд╛рди рдерд╛ред рджрд░рдЕрд╕рд▓ рдореИрдВрдиреЗ рдЬрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╡рд╣ рдЕрдЪрд╛рдирдХ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред