Browse Source

调整避免重复运行的功能

master
李昭辉 1 month ago
parent
commit
f51470052a
  1. 40
      crontab/crosscheck_auto_shell_v2.php

40
crontab/crosscheck_auto_shell_v2.php

@ -1,14 +1,12 @@
<?php <?php
include(__DIR__ . '/../lib/mCrossCheck.php'); include(__DIR__ . '/../lib/mCrossCheck.php');
ini_set('date.timezone', 'Asia/Shanghai'); ini_set('date.timezone', 'Asia/Shanghai');
// 同一时间只能有一个进程在运行
$lock_file = __DIR__ . '/crosscheck_auto_shell.lock'; // 避免程序重复运行
if (file_exists($lock_file)) { $need_run = cProcessNum();
echo '另一个进程正在运行,请稍后重试。' . PHP_EOL; if(!$need_run) {
exit(1); exit("is running, exit.\n");
} }
// 创建锁文件
touch($lock_file);
$log_file = __DIR__ . '/../logs/'.date('Y-m-d').'/crosscheck_auto_shell.log'; $log_file = __DIR__ . '/../logs/'.date('Y-m-d').'/crosscheck_auto_shell.log';
$log_dir = dirname($log_file); $log_dir = dirname($log_file);
@ -102,13 +100,31 @@ try{
sleep(60*4); sleep(60*4);
} }
// 删除锁文件
unlink($lock_file);
}catch(Exception $e){ }catch(Exception $e){
$str_log = date('Y-m-d H:i:s')."|异常退出|异常信息:".$e->getMessage(); $str_log = date('Y-m-d H:i:s')."|异常退出|异常信息:".$e->getMessage();
file_put_contents($log_file, $str_log . PHP_EOL, FILE_APPEND); file_put_contents($log_file, $str_log . PHP_EOL, FILE_APPEND);
// 删除锁文件 }
unlink($lock_file);
}
/**
* 进程上限限制
*
* @return boolean
*/
function cProcessNum() {
// 当前程序文件名包含路径
$path_deal = __FILE__;
$processnum = 1;
$cmd = "ps -ef | grep '{$path_deal}' | grep -v grep | grep -v '\/bin\/sh' | grep -v 'sh -c' | wc -l";
$rcmd = @popen($cmd, 'r');
$num = @fread($rcmd, 512);
$num += 0;
echo "[$path_deal]进程数超过{$processnum}个,当前进程数{$num}个\n";
@pclose($rcmd);
if($num >$processnum) {
return false;
}
return true;
}
Loading…
Cancel
Save