Re: [請益] php 如何實現crontab 的功能

看板PHP作者 (霸格尼尼)時間18年前 (2007/10/14 11:31), 編輯推噓4(404)
留言8則, 3人參與, 最新討論串5/5 (看更多)
我在想可不可以弄個 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, , 2F
這不知道能不能用
10/14 11:58, 2F

10/14 13:34, , 3F
push!!
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
後續有何發展 我會PO 上
10/14 23:41, 6F
※ 編輯: buganini 來自: 221.169.71.109 (10/16 12:48)

10/16 12:49, , 7F
補充一下, 一定要拿個變數去收他, 不然會always true
10/16 12:49, 7F

10/16 12:51, , 8F
reference跟value的差別
10/16 12:51, 8F
文章代碼(AID): #174OsgB6 (PHP)
文章代碼(AID): #174OsgB6 (PHP)