X皮書之shell實戰開發
序
最近正在忙于開發豆瓣數據同步,主要原因是豆瓣接口不給力,超過一定的訪問量就抓不到它的數據。所以決定把豆瓣的數據導入到本地服務器,然后使用我們自己的數據。
導入數據的腳本我已經開發完了。現在就剩下命令行調用了。今天我就專門研究了下shell的應用,我把我的思考過程寫一下。
準備
這是要使用的php測試腳本(并不是我的線上代碼,只是一個樣例)。
- <?php
- if ($_SERVER['argc'] < 2) {
- echo "調用不正確!\n";
- echo "調用方式:";
- echo "php {$_SERVER['argv'][0]} { rsync_show | rsync_show_by_id 1231123 | rsync_douban }\n";
- exit(-1);
- }
- function rsync_show() {
- echo "調用節目數據\n";
- }
- function rsync_show_by_id($id) {
- if(emptyempty($id)){
- echo "缺少參數...\n";
- exit(-1);
- }
- echo "根據指定ID開始導入節目數據\n";
- }
- function rsync_douban() {
- echo "調用豆瓣數據層\n";
- }
- foreach ($_SERVER['argv'] as $k => $v) {
- if($k == 0) continue;
- if($v == 'rsync_show_by_id'){
- call_user_func($v, $_SERVER['argv'][2]);
- break;
- }else{
- call_user_func($v);
- }
- }
- exit(0);
查看幾個調用結果
錯誤1
錯誤2
正確的調用方式
通過crontab -e設置個定時執行腳本
#p#
shell 腳本
1、開始使用shell腳本編程
運行腳本
2、添加一個停止腳本
3、函數整理
#p#
shell 查漏補缺
兩大問題:1、是不是再寫一個方法?2、怎么傳參啊?
第一個問題,直接用start方法就行了,沒必要再寫一個方法!——多寫一個方法是要付出代價的。
第二個問題怎么解決,我忽然想到在我們安裝開源軟件的時候喜歡這么用,如下圖
所以我決定也使用類似的方法作為參數傳遞之用。
具體看我下面的方法調用啊!
運行腳本
重點:
放入crontab中
我在php的源代碼中的configure中發現了一個不錯的輸出字符的方法,與大家分享
運行效果
總結
這就是我今天收獲的一些東西,shell我也不是很精通。如果大家有更好的建議,希望告知一、二。
原文鏈接:http://www.cnblogs.com/baochuan/archive/2012/10/24/2737723.html
【編輯推薦】