crontab -e相關使用及問題
(2012-02-18更新)小蛙打算在「我的股票精算師」中加入可以即時查詢大盤以及個股的資訊,再透過RESTful的方式讓手機取得,而Server從證交所取得資料的部分,可能設定每分鐘或每五分鐘更新一次(降低Request次數,不曉得太頻繁的Request會不會被ban掉),定期執行某項工作的任務就交給超好用的crontab,這篇文章小蛙要記錄crontab -e設定以及執行PHP程式。
Linux部份的東西小蛙是一點兒也不拿手,下面的資料也都是從Google找到的,小蛙在讓 crontab 自動排程執行 php @ 網路技術日誌中找到讓crontab執行php的方法,小蛙使用了文章中的方法二,直接從crontab -e去設定要執行的路徑及方法,做法如下:
*/5 * * * 1-6 /usr/lib/cgi-bin/php5 -q /xxx/ooo/111.php >> /root/php 2>&2
第一個「*/5」指的是每5分鐘執行一次(詳細設定請參考第十六章、例行性工作排程 (crontab) @ 鳥哥的Linux私房菜),「1-6」指的是星期一到星期六都要。「/usr/lib/cgi-bin/php5 -q」小蛙不曉得為什麼PHP路徑在那麼奇怪的地方,後面的-q也懶得去查所代表的意義,總之可以跑就對了(太懶><),「/xxx/ooo/111.php」是要執行的PHP路徑。
設定好之後確實是可以正常運作了,但是後來發現如果別人也知道這個網址,只要在瀏覽器打上一樣的網址,程式就會運行一次 … 聽起來是多麼可怕的一件事,所以小蛙加上了現在大家最常用的API KEY的方式判斷是否為「有權限執行」。但是上面的方法似乎就不能夠帶參數了,Cron定时执行带参数的PHP代码 @ 飘易博客中提到了三種可以帶參數定期執行PHP的方法,恰巧小蛙前陣子在試node.js的時候已經安裝了curl(不知道什麼是curl以及如何安裝,請到curl @ DebianWiki),就決定用第三種(看起來也比較簡單)。
*/5 * * * 1-6 curl 'http://xxx/ooo/111.php?APIKEY=123456&s=hi' >> /root/php 2>&2
上面那行就是最後的結果囉!希望這篇文章能對像小蛙一樣跟Linux不熟的網友有幫助!
2012-02-18
之前寫的定期備份wordpress的shell script手動可以正常執行,但只要放進crontab就完全不會動 … 後來在鳥哥的 Linux 私房菜中發現shell script第一行要宣告使用的shell名稱。
第一行 #!/bin/bash 在宣告這個 script 使用的 shell 名稱:
因為我們使用的是 bash ,所以,必須要以『 #!/bin/bash 』來宣告這個檔案內的語法使用 bash 的語法!那麼當這個程式被執行時,他就能夠載入 bash 的相關環境設定檔 (一般來說就是 non-login shell 的 ~/.bashrc), 並且執行 bash 來使我們底下的指令能夠執行!這很重要的!(在很多狀況中,如果沒有設定好這一行, 那麼該程式很可能會無法執行,因為系統可能無法判斷該程式需要使用什麼 shell 來執行啊!)
為什麼你要用這麼特殊的方式而不用 php-cli 咧…
哈哈 ~ 因為不懂嘛 >< 剛看了一下php cli發現好像很方便 … 昨天應該要先問喵的 = =