运行 仅当脚本不是 运行 时才执行 Cron
Run Cron only if the script is not running
我有一个 PHP 脚本,一旦它 运行,它就会检查数据库,然后 运行 一些 URL 的循环(使用 CURL 来抓取网站)。我希望此脚本每天 24 小时 运行ning。我目前每 10 分钟使用一次 cPanel 的 cron,但问题是,有时脚本需要超过 10 分钟,cron 会尝试再次打开,这会造成很大的冲突。
我想要的是,某种 PHP 服务或 运行 脚本的 cron 脚本,前提是它不是 运行ning。
您可以使用数据库字段来控制抓取间隔和分配抓取状态(如 'active'、'done' 等),您也可以使用锁定文件,例如:
<pre>
// define name for lock
$lock_name = "/location/on/server/imworking.loc";
// exit script if lock file exists
if( is_file( $lock_name ) ) exit ( 'Lock file exists, lets exit here! );
// create new lock file before doing your things
$lock_file = fopen( $lock_name, "w" );
fwrite($lock_file , "working"); //this isn't really needed..
fclose($lock_file);
// do your stuff here, you can use try / catch statements as
// errors may prevent deleting lock file and so starting script again
//your stuff finished so let's remove lock file
unlink('/location/on/server/imworking.loc');
</pre>
我有一个 PHP 脚本,一旦它 运行,它就会检查数据库,然后 运行 一些 URL 的循环(使用 CURL 来抓取网站)。我希望此脚本每天 24 小时 运行ning。我目前每 10 分钟使用一次 cPanel 的 cron,但问题是,有时脚本需要超过 10 分钟,cron 会尝试再次打开,这会造成很大的冲突。
我想要的是,某种 PHP 服务或 运行 脚本的 cron 脚本,前提是它不是 运行ning。
您可以使用数据库字段来控制抓取间隔和分配抓取状态(如 'active'、'done' 等),您也可以使用锁定文件,例如:
<pre>
// define name for lock
$lock_name = "/location/on/server/imworking.loc";
// exit script if lock file exists
if( is_file( $lock_name ) ) exit ( 'Lock file exists, lets exit here! );
// create new lock file before doing your things
$lock_file = fopen( $lock_name, "w" );
fwrite($lock_file , "working"); //this isn't really needed..
fclose($lock_file);
// do your stuff here, you can use try / catch statements as
// errors may prevent deleting lock file and so starting script again
//your stuff finished so let's remove lock file
unlink('/location/on/server/imworking.loc');
</pre>