1. 问题

定时脚本按照定时时间运行php时,如果出现脚本时间运行过长时,会出现同一时间有多于一个脚本在运行,但这不符合某些特定场景,因此需要给脚本加个锁,加锁方式有多种。
进程锁是检测进程中有某个脚本在运行时,就不打开同一个新的脚本。

2. 开发

  1. <?
  2. $redis_key = sprintf("%s:%s",MAIN_HOST,"jl_alarm_redis_lock");
  3. $ret = $redis->get($redis_key);
  4. if ($ret) {
  5. $exist = posix_getsid($ret); // 进程sid
  6. if ($exist) {
  7. $redis->set($redis_key,$ret,5);
  8. _log("脚本已加锁,正在执行,无法再创建新的脚本任务");
  9. die();
  10. }
  11. }
  12. $pid = posix_getpid(); // 当前进程pid
  13. $redis->set($redis_key,$pid,5);