Pages

03/11/2018

how to create schedule task on php



杜芬宅正在製作一個 Passive Investment Management System (PIMS),那是一個被動收入的管理系統。




前言

杜芬宅想發財,所以決定去找一些錢,然後想辦法將那些錢好像雪球一樣愈滾愈大。
普遍認為那最直接的手法就是投資股票,但是杜芬宅不想跟風,人買我又買,杜芬宅看中的股票,想認真投資的公司一手股要接近HKD 80,000。沒有那麼多錢,所以去了做定期存款。

背景

定期存款愈做愈多,加上有外幣的定期存款,外幣的活期存款。
一直也是用Excel做記錄,初期效率還可以,當定期、外匯愈來愈多,你又想有一些更進一步的功能時,Excel真的無能為力。

例如
按現時匯率,計算總資產。
預定3個月後有一筆大花費,HKD100,000 ,要預留金錢,我的現金流足夠嗎?
定期快完結時,都是靠自已提醒自已,可能需要提前更改到期指示。
外匯不斷變化,每次/每段時期買賣,是賺是洩?

那些問題,Excel都無能為力,要實現不是不可以但非常花時間,且要核對,花雙倍時間。
與其都是沒有時間,所以杜芬宅決定將Excel閒置一會,記錄照進行但不改善Excel。
將那僅餘的時間用來製作一個系統,幫助杜芬宅解決以上困難。

那個計劃由 July 2017 開始,沒錯已經進行了一年多,杜芬宅還在很努力地製作。

問題

為了較準確的計算總資產,系統需要定時去抓取外匯匯價。
那套系統的核心來源自杜芬宅另一個作品。
所以杜芬宅為了準備那個程序,去拜見Google 大師。

解決方案

首先,PHP本身是沒有scheduler 的功能,沒可能寫一個.php,然後叫php 定時去跑那個.php檔。
所有找到的方法都必需依靠外來的力量。

大致分為
PHP library / framework
Windows Scheduler
Java

PHP library

Crunz
Crunz is a framework-agnostic package to schedule periodic tasks (cron jobs) in PHP using a fluent API.
雖然不明,也不太想明它的原理。但是看見
To run the tasks, you only need to install an ordinary cron job (a crontab entry) which runs every minute, and delegates the responsibility to Crunz' event runner:
即是要再安裝一個ordinary cron job (a crontab entry)。
沒有說明如何安裝,以及假設 PIMS 要租web hosting 放到互聯網,一般都是給你cPanel 、 FTP 上/下載整個網頁,再允許website admin做一些設定就什麼都沒有。

不清楚那個安裝ordinary cron job (a crontab entry) 是什麼東西,如果是apache module還多,要額外安裝什麼的再起動它,然後它自已每分鐘自已執行什麼。
通常要租VM 虛擬主機才有較大的自由度,自行安裝額外軟件。
租VM太貴了,加上安裝一個ordinary cron job (a crontab entry)的不確定性,放棄那選項。

Windows Scheduler

那個方法很簡單,隨意寫個 scheduleTask.php 如下
<?php
$data = date('Y-M-D')."-".time();
echo $data;
$file = fopen('store.txt', 'a');
fwrite($file, $data."\r\n");
fclose($file);
?>
那個PHP會生成store.txt,並加入執行時間。
然後透過php command line 踢起 scheduleTask.php。
例如 .bat
D:
cd D:\xampp\htdocs
D:\xampp\php\php.exe scheduleTask.php

再透過windows scheduler ,建立一個事件,定期執行
在那裡杜芬宅就不明白,為什麼有人要刻意用另一個 gnuwin32.exe 去做那件事。

有些例範則是
D:\xampp\php\php.exe -f D:\xampp\htdocs\scheduleTask.php

那個方法的壞處同上,好處是scheduleTask.php 可以放在web root 以外的地方。
完成隔離瀏覽者存取。

Java

Tomcat 是 Java 的 其中一種伺服器,java 本身自帶很多scheduler方法。
而Tomcat , apache, mysql 也包括在 xampp內,同時很多web hosting 都有同時提供。
所以杜芬宅決定使用java,透過定期存取.php,實現定時執行.php。
問題是java 以http 存取.php,後續需要設定.htaccess 防止瀏覽者自行觸發那個預訂事件。

e.g
order deny,allow
deny from all
allow from <your ip>

接下來會以圖片說故事。

1. 安裝及設定 Eclipse IDE for Java EE Developers

安裝那個Java EE Eclipse 內含很多網站相關功能,且可以整合專案發佈到tomcat。












2. Dynamic Web Project

建立專案,建立JSP File





杜芬宅忘了停xampp的tomcat,所以發生了錯誤。





3. 建立測試用.php




4. 建立 Java classes









5. Deploy Java proejct

Deploy as .war file






Reference

Java JSP架站 - Tomcat Apache Eclipse 設定
示範如何在Windows系統下安裝 Tomcat Apache 與 Eclipse,撰寫第一個JSP網頁
https://progressbar.tw/posts/2

How to schedule a task in Tomcat
https://stackoverflow.com/questions/18226126/how-to-schedule-a-task-in-tomcat

How do I run a PHP script using windows schedule task?
https://stackoverflow.com/questions/4701861/how-do-i-run-a-php-script-using-windows-schedule-task

Java Program to Check if a String is Empty or Null
https://www.programiz.com/java-programming/examples/string-empty-null

Java - Object and Classes
https://www.tutorialspoint.com/java/java_object_classes.htm

Java - Date and Time
https://www.tutorialspoint.com/java/java_date_time.htm

Java - Exceptions
https://www.tutorialspoint.com/java/java_exceptions.htm

What is the default username and password in Tomcat?
https://stackoverflow.com/questions/3829513/what-is-the-default-username-and-password-in-tomcat

Tutorial - PHP Crons on Windows
https://www.youtube.com/watch?v=sx4vh4KdFPw&t=123s
gnuwin32.exe

lavary / crunz
https://github.com/lavary/crunz

No comments:

Post a Comment