Linux系统下能否实现以下这个功能

天降大任于斯 2009-10-10 11:26:05
现在的做法是,通过crontab每分钟执行一个php,这个php负责从数据库中取出邮件,然后发送

问题是,如果邮件很多,每分钟执行不完,那会造成很多php进程

能不能实现等这个php执行完了立即启动一个新的?不用crontab
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
MeE 2009-10-12
  • 打赏
  • 举报
回复
居然有代码标识,试用下:
<? 
$p="/tmp/mail.pid";
if(file_exist($p))
exit;
fclose(fopen($p,"wb"));

//TODO

unlink($p);
?>
MeE 2009-10-12
  • 打赏
  • 举报
回复
<?
$p="/tmp/mail.pid";
if(file_exist($p))
exit;
fclose(fopen($p,"wb"));

//TODO

unlink($p);
?>
itian 2009-10-10
  • 打赏
  • 举报
回复
本方法常用于crontab中防止同一进程重复运行造成数据紊乱的情形。



<?php

$thread = 0;

$psfile = "/u2/WebRoot/admin/virus/file/viruschknum_psfile";

$command = "ps ax | grep viruschknum.php | grep -v \"> $psfile\" | grep -v \"grep\" | grep -v \"log.txt\" > $psfile";

//$command = "ps -ef | grep /u2/WebRoot/admin/virus/viruschknum.php > $psfile";

exec($command);

$ps = file($psfile);

echo "/////\nCrontabTime:".date("Y-m-d H:i:s")."\n";

if(sizeof($ps)>1){

echo "Thread Exists!\n";

exit;

}

else{

echo "Thread isn't Exists! ----------->GO!\n";



//...



}





?>
「已注销」 2009-10-10
  • 打赏
  • 举报
回复
你的需求是把邮件队列中新加入的邮件不断的按一定顺序发送出去是吧?

而触发方式是定时检查?

最简单的方式就是while(true) + sleep

然后发现它缺少守护进程,一但程序终止了工作就停止了。

你之前之所以用crontab就是因为防止它不工作了,不是么:)

其实问题就在于如何保证随时有进程在运行。

不用crontab不是不行,但是作为php脚本你需要想办法保证它长时间正常工作。

关于很多脚本同时运行,这说明你未作任何处理导致的。很多办法可以解决这个问题,比如php中通过系统命令 exec("ps aux|grep '/script/path/script_name.php'|wc -l");检查该脚本同时运行数量,更严谨些你甚至可以加个任务状态啥的保证其运行并且唯一,而且具有异常处理能力。

至于拿shell写,还是perl,还是php我觉得根据实际情况你随便。呵呵。要求很高的话你可以用C写个狗。
SICTXK 2009-10-10
  • 打赏
  • 举报
回复
思路:两个crontab。
A crontab :每分钟执行一个readdb.php,这个php负责从数据库中取出邮件,并存放到一个指定文件mail_list
B crontab :每分钟执行一个sendmail.php,这个php负责去mail_list文件中读取一个邮件地址,发送邮件,然后删除mail_list中的本条记录。

wxq4100798 2009-10-10
  • 打赏
  • 举报
回复
第一种 用crontab 配合SH 脚本,如果SH 脚本检测到发邮件的程序进程在运行,表示邮件没发完,则不做任何事,如果没有进程,则表示程序已执行完,启动新进程 再重新开始发邮件


第二程 while(true) + sleep
ppq886 2009-10-10
  • 打赏
  • 举报
回复
第一种 用crontab,你可以做个数量的限制,例如每分钟发送十个邮件,然后继续每分钟执行这个文件

第二种, 创建两个程序, 一个是执行程序一直死循环的跑着, 去file 另外一个发邮件的程序 如果得到另外一个程序邮件发送成功就执行下一个

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧