рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдУрдЭрд╛ рдХреЗ рд▓рд┐рдП рдореЗрдореЛредрд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ: рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ phpDaemon рдФрд░ System_Daemon рдХреНрдпрд╛ рд╣реИрдВред рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд▓реЗрдЦ рдкрдврд╝рддрд╛ рд╣реВрдВ, рдФрд░ рдПрдХ рд╣рд╛рдм рдкрд░ рднреАред
рддреЛ, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рддрдп рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рджрд╛рдирд╡ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╡рд╣ рдХреНрдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
- рдХрдВрд╕реЛрд▓ рд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ
- рд▓реЙрдЧ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦреЗрдВ, рдХрдВрд╕реЛрд▓ рдХреЛ рдХреБрдЫ рднреА рдЖрдЙрдЯрдкреБрдЯ рди рдХрд░реЗрдВ
- рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ
- рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░реЗрдВ
- рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛
рд╣рдо рдХрдВрд╕реЛрд▓ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ
Pcntl_fork () рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪрд░
$ child_pid рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ 0 рд╣реЛрдЧрд╛), рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░реЗрдЧреАред рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧреАред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдбреЗрдореЙрди рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА (рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕рд╣рд┐рдд) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рд╣рд╛рдВ, рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ
$baseDir = dirname(__FILE__); ini_set('error_log',$baseDir.'/error.log'); fclose(STDIN); fclose(STDOUT); fclose(STDERR); $STDIN = fopen('/dev/null', 'r'); $STDOUT = fopen($baseDir.'/application.log', 'ab'); $STDERR = fopen($baseDir.'/daemon.log', 'ab');
рдпрд╣рд╛рдВ рд╣рдо рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрд╕, рдЕрдЧрд░ STDIN / dev / null рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рджрд╛рдирд╡ рдХрдВрд╕реЛрд▓ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝реЗрдЧрд╛ - рдпрд╣ рдЙрд╕рд╕реЗ рдЕрдЫреВрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдбреЗрдореЙрди рдХреЗ рд╕рднреА рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рд▓реЙрдЧ рдЗрди рд╣реЛрдВрдЧреЗред
рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
include 'DaemonClass.php'; $daemon = new DaemonClass(); $daemon->run();
рдЬрдм рд╣рдордиреЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рд╕реМрдВрдкреЗ рдЧрдП рдХрд╛рд░реНрдп рдХреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
DaemonClass.php рдмрдирд╛рдПрдВ рдФрд░ рдПрдХ рд╡рд░реНрдЧ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрдореЙрди рдХрд╛ рдореВрд▓ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
DaemonClass.php
рд╣рдо рд╕рдВрдХреЗрдд SIGTERM (рд╢рдЯрдбрд╛рдЙрди) рдФрд░ SIGCHLD (рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ) рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдЕрдирдВрдд рд▓реВрдк рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдбреЗрдореЙрди рд╕рдорд╛рдкреНрдд рди рд╣реЛред рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдФрд░ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдпрджрд┐ рдирд╣реАрдВред
protected function launchJob() {
pcntl_fork () рд░рд┐рдЯрд░реНрди -1 рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ $ pid рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдпрд╣ рдЪрд░ рдмрдЪреНрдЪреЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ 0 рд╣реЛрдЧрд╛)ред
public function childSignalHandler($signo, $pid = null, $status = null) { switch($signo) { case SIGTERM:
SIGTERM - рд╕рд╣реА рд╢рдЯрдбрд╛рдЙрди рдХрд╛ рд╕рдВрдХреЗрддред SIGCHLD - рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрдХреЗрддред рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред SIGTERM рдХреЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░реЗрдВ - рд╣рдорд╛рд░рд╛ "рдЕрдВрддрд╣реАрди рд▓реВрдк" рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдбреЗрдореЙрди рдХреА рдХрдИ рдкреНрд░рддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдпрд╣
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
UPD: Dlussky habrayuzer рдиреЗ рдЕрдкрдиреА
рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ PHP> = 5.3.0 рдореЗрдВ
рдбрд┐рдХреНрд▓реЗрдпрд░ (рдЯрд┐рдХ = 1) рдХреЗ рдмрдЬрд╛рдп
pcntl_signal_dispatch () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП