进来发现我每次群发邮件都要跑到服务器折腾一番,守护php的任务,也可以用linux自带的crontab来实现。
但是服务器上这玩意太多了。所以简单开发一个纯php来实现的办法
功能1. 当有任务的时候,执行任务
功能2. 当没有任务时候,自己sleep,每隔一定时间(代码里2秒)扫描任务文件auto.lock,判定是否需要执行任务。如果文件内容为1那么执行任务,如果为0,那么接着睡觉
还可以开发
1. 任务中断,需要改动runonce的代码,在执行过程打断,月小升觉得没必要,我不需要在群发邮件的时候中断
2. 多个任务管理 搞得更复杂了。除非有很多任务要被php管理,否则拷贝一个php 来的方便些。
linux 一次启动,就不管了。
nohup php auto.php &
auto.php 源码
1){
return true;
} else{
return false;
}
}
/*
‘r’ 只读方式打开,将文件指针指向文件头。
‘r+’ 读写方式打开,将文件指针指向文件头。
‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
LOCK_SH取得共享锁定(读取的程序)。
LOCK_EX 取得独占锁定(写入的程序。
LOCK_UN 释放锁定(无论共享或独占)。
*/
function writeover($filename,$data,$method="rb+",$iflock=1)
{
@touch($filename);/*文件不存在则创建之.可以采用file_exists验证并其他创建文件函数代替.测试结果效率相当*/
$handle=@fopen($filename,$method);
if($iflock){
flock($handle,LOCK_EX);
}
fwrite($handle,$data);
if($method=="rb+") ftruncate($handle,strlen($data));
fclose($handle);
}
?>
执行效果
# php auto.php
2020-04-22 18:10:44 : watch every 3 s
2020-04-22 18:10:47 : watch every 3 s
2020-04-22 18:10:50 : watch every 3 s
2020-04-22 18:10:53 : watch every 3 s
2020-04-22 18:10:56 : watch every 3 s
2020-04-22 18:10:59 : watch every 3 s
2020-04-22 18:11:02 : watch every 3 s
2020-04-22 18:11:05 : watch every 3 s
2020-04-22 18:11:08 : watch every 3 s
2020-04-22 18:11:11 : watch every 3 s
2020-04-22 18:11:14 : watch every 3 s
2020-04-22 18:11:17 : watch every 3 s
2020-04-22 18:11:20 : watch every 3 s
2020-04-22 18:11:23 : watch every 3 s
2020-04-22 18:11:26 : watch every 3 s
2020-04-22 18:11:29 : watch every 3 s
2020-04-22 18:11:32 Start job
2020-04-22 18:11:32 Job finished.
2020-04-22 18:11:35 : watch every 3 s
2020-04-22 18:11:38 : watch every 3 s