新金沙3777

在实质上代码运转前检查与近年来相像操作的长河是还是不是正在运转

一月 27th, 2020  |  未分类

运用格局:复制代码 代码如下:if
(singleProcess, ‘path/to/script.pid’State of Qatar卡塔尔国{ // code goes
here}else{exit(“Sorry, this script file has already been running
…n”);}

function __construct {$this->pidFile = $pidFile;}

return $command;}

/** * 非拥塞情势赶回经过是不是正在运作 */function check() {if
{$pidFile = $this->pidFile;if {$flag = false;$pidDir = dirname;if
{$flag = true;}if {$running = true;clearstatcache;if
(!file_existsfile_put_contents($this->pidFile, ”, LOCK_EX);$f =
fopen;if (flock($f, LOCK_EX ^ LOCK_NB)) {$pid = trim;if
(!$this->is_process_running {$running = false;}}if
{fseek;ftruncate;fwrite;}flock;fclose;return $running;} else
{debug_print is invalid”, E_USER_WARNING);}} else {debug_print(“pid
file cant’t be empty”, E_USER_WARNING);}} else
{debug_print(__CLASS__ . ‘ can only run in Linux’,
E_USER_WARNING);return true;}}

复制代码 代码如下:/** * 保证单进度 *
* @param string $processName 进程名 * @param string $pidFile
过程文件路线 * @return boolean 是还是不是继续试行当前历程 */function
singleProcess($processName, $pidFile){if && $fp =
@fopen{flock;$last_pid = fread($fp, filesize;fclose;

/**
同叁个PHP进度只运转三遍,遵照进程名字推断是还是不是为排重进程,只好运营于linux,高并发条件下是出现安全的。*/

/** * 获取当前进度对应的Command * * @return string 命令及其参数
*/function getCurrentCommand(){$pid = posix_getpid();$command =
exec(“/bin/ps -p $pid -o command=”);

复制代码 代码如下:

$cur_pid = posix_getpid();

private $pidFile;

if {$command = exec(“/bin/ps -p $last_pid -o command=”);

结构方法传递pid文件目录的相对路线,供给团结保障不一样进度对应区别pid文件。

if ($command == $processName){return false;}}}

/** * 即便正在运转照旧发生不明不白错误重回true,若无运行再次回到false *
@param mixed $pid */private function is_process_running {if && $pid
> 0State of Qatar {$output = array(卡塔尔国;$line = exec(“ps -o pid –no-headers -p
$pid”, $output卡塔尔;//再次回到值有空格$line = trim;if {return true;} else {if
{return false;} else {if == ‘cli’卡塔尔国$n = “n”;else$n = “
“;//到这一步的话应该是出什么难点了$output =
implode;debug_print($output, E_在实质上代码运转前检查与近年来相像操作的长河是还是不是正在运转。USER_WARNING);return true;}}}else
{return false;}}

return true;}else{return false;}}

Demo:

if ($fp = @fopen{fputs;ftruncate);fclose;

时常蒙受这么大器晚成种处境,安排职务定期后台施行有个别php程序,不经常候也必要手动试行,或许多少人都要求实施那个顺序,要是职责持续时间不短,就十分轻松招致重复实行,所以就开拓了上面包车型地铁类。

class SyncProcess {

成效:在其实代码运营前检查与眼下大器晚成致操作的历程是不是正在运作,高并发运维是保障的,运转中的进度中途十分中断不会产生别的影响。

复制代码 代码如下:$sync = new
SyncProcess(应用软件_PATH . ‘/data/pid’.implode));if {exit(“process is
runningn”);}

相关文章

Your Comments

近期评论

    分类目录

    • 没有分类目录

    功能


    网站地图xml地图