fixed sync to be more robust
This commit is contained in:
parent
7a0c18ff87
commit
4c29adb73f
1 changed files with 36 additions and 3 deletions
|
@ -7,6 +7,11 @@
|
||||||
*/
|
*/
|
||||||
class Sync{
|
class Sync{
|
||||||
|
|
||||||
|
const OS_UNKNOWN = 1;
|
||||||
|
const OS_WIN = 2;
|
||||||
|
const OS_LINUX = 3;
|
||||||
|
const OS_OSX = 4;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* performs the actions listed in the querycache.
|
* performs the actions listed in the querycache.
|
||||||
* All entries in the querycache will be read and performed depending on their type.
|
* All entries in the querycache will be read and performed depending on their type.
|
||||||
|
@ -24,10 +29,10 @@ class Sync{
|
||||||
if(isset($pid) and function_exists('pcntl_fork') ) {
|
if(isset($pid) and function_exists('pcntl_fork') ) {
|
||||||
// We're the main process.
|
// We're the main process.
|
||||||
} else {
|
} else {
|
||||||
if(!file_exists($pidfile)) {
|
$pid = getmypid();
|
||||||
$pid = getmypid();
|
if(!file_exists($pidfile) or (file_exists($pidfile) && Sync::check_pid(file_get_contents($pid)))) {
|
||||||
$file = fopen($pidfile, 'w+');
|
$file = fopen($pidfile, 'w+');
|
||||||
if (!$file)
|
if (!$file) {
|
||||||
echo $pidfile.' is not writeable.';
|
echo $pidfile.' is not writeable.';
|
||||||
error_log($pidfile.' is not writeable.');
|
error_log($pidfile.' is not writeable.');
|
||||||
throw new SystemExit();
|
throw new SystemExit();
|
||||||
|
@ -94,4 +99,32 @@ class Sync{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function check_pid($pid){
|
||||||
|
|
||||||
|
$OS = Sync::getOS();
|
||||||
|
|
||||||
|
if ($OS == 2) {
|
||||||
|
$processes = explode( "\n", shell_exec( "tasklist.exe" ));
|
||||||
|
foreach( $processes as $process )
|
||||||
|
{
|
||||||
|
if( strpos( "Image Name", $process ) === 0
|
||||||
|
|| strpos( "===", $process ) === 0 )
|
||||||
|
continue;
|
||||||
|
$matches = false;
|
||||||
|
preg_match( "/(.*?)\s+(\d+).*$/", $process, $matches );
|
||||||
|
$pid = $matches[ 2 ];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return file_exists( "/proc/$pid" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static public function getOS() {
|
||||||
|
switch (true) {
|
||||||
|
case stristr(PHP_OS, 'DAR'): return self::OS_OSX;
|
||||||
|
case stristr(PHP_OS, 'WIN'): return self::OS_WIN;
|
||||||
|
case stristr(PHP_OS, 'LINUX'): return self::OS_LINUX;
|
||||||
|
default : return self::OS_UNKNOWN;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue