Re: [請益] php 如何實現crontab 的功能
我在想可不可以弄個
cron.php
<?php
set_time_limit(0);
ignore_user_abort(true);
if($sock=stream_socket_server('udp://0.0.0.0:9999',
$en, $es, STREAM_SERVER_BIND)){
while(1){
$now=time();
#SELECT `id`,`cmd` FROM `crontab` WHERE `next`<=$now;
#UPDATE `crontab` SET `next`=blah;
#exec(cmd);
sleep(300-time()+$now);
}
}
?>
然後只要用browser去連他一下就ok了
這裡用socket來做lock避免重複執行
(一時間想不到其他方法, 這樣應該可以吧?)
但是他掛掉的時候你得自己再去起動他
但是要儘量減短每個指令需要的時間
因為這沒跑thread
弄不好會拖很久
阿不然就是再弄個
thread.php
<?php
set_time_limit(0);
ignore_user_abort(true);
if($_SERVER['REMOTE_ADDR']!='127.0.0.1'){
die();
}
#SELECT `cmd` FROM `crontab` WHERE `id`=$_GET['id'];
#exec(cmd);
?>
然後cron.php那裡用Curl連thread.php?id=X
並且curl timeout設短一些
也不一定要用udp
有unix://可以用的話應該會更好
tcp也是可以
只是我猜想udp消耗的資源應該會<=tcp
只是猜想
以上兩個合成一頁也是OK
剛剛爬到以前的
3517 1 5/19 foxzgerald R: [閒聊] ignore_user_abort()
其實裡面有一點想法了
可是少了一個重點
如果我記的沒錯的話
要產生一個background process
事實上是執行A (a)
然後A fork出 B (b)
然後A自己結束掉 (c)
B變成斷線風箏
這時B就是一個background process
這裡(a)就是cron.php去執行curl的動作 (雖然不是獨立process,但可接受啦)
(b)是Curl做的事
(c)用timeout達成
※ 編輯: buganini 來自: 221.169.71.109 (10/14 11:54)
→
10/14 11:58, , 1F
10/14 11:58, 1F
→
10/14 11:58, , 2F
10/14 11:58, 2F
推
10/14 13:34, , 3F
10/14 13:34, 3F
※ 編輯: buganini 來自: 221.169.71.109 (10/14 14:03)
推
10/14 23:35, , 4F
10/14 23:35, 4F
推
10/14 23:40, , 5F
10/14 23:40, 5F
→
10/14 23:41, , 6F
10/14 23:41, 6F
※ 編輯: buganini 來自: 221.169.71.109 (10/16 12:48)
推
10/16 12:49, , 7F
10/16 12:49, 7F
→
10/16 12:51, , 8F
10/16 12:51, 8F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章
125
129