之前學過shell指令碼,但是工作中一直沒有用到,今天由於要搞一個定時任務,為了防止重複啟動php指令碼,就需要寫一個shell,
學到的東西終於用到了,用記住的那些知識點寫了這個指令碼,在此記錄備忘說明一下,希望能夠協助大家回憶起一些相關知識點。
下面是指令碼內容:
*************************************
#!/bin/bash //聲明要使用哪個shell
下面是備忘檔案 這可是一個好習慣奧
# 運行第三方分享指令碼shell
# Copyright (c) 2012, Jiehun.com.cn Inc. All Rights Reserved
# @author 77500933@qq.com
# @date 2012-7-18
# @version 1.0
//設定相關變數
filePath='/home/zhanghaozheng/workspace/iHapN/trunk/tools/cooperation/CrondShare.php'
scriptName='CrondShare.php'
logFile='/tmp/crond_share.log'
sitePath='/home/zhanghaozheng/jiehun'
declare -i logFileLines=0 //定義整形變數
#檔案最大行數 超過則覆蓋
declare -i maxFileLine=2000 //定義整形變數
//接收執行sh傳過來的參數
#最大行數允許參數控制
if [ -n "$1" ];then //判斷參數是否為空白
maxFileLine=$1
fi
//定義函數
function getLogFileLines()
{
file=$1 //接受參數1
if [ -f "$file" ];then //判斷檔案是否存在
echo `cat "$file"|wc -l` //擷取檔案行數
else
echo 0
fi
}
logFileLines=`getLogFileLines "$logFile"`; //調用函數並接收傳回值賦給logFileLines
#如果指令碼已經啟動就不再啟動
s=`ps aux | grep "$scriptName"`; //在進程中尋找指令碼名稱來確定指令碼進程是否啟動
mark=`echo $s | grep "/usr/bin/php"` //確認是否是php進程
query='cd "$sitePath" && /usr/bin/php tools/start.php CrondShare="$filePath" -d'
if [ "$mark" == "" ]; then //如果進程不存在則啟動進程
#防止記錄檔案過大
if [ "$logFileLines" -gt "$maxFileLine" ]; then 比較兩個參數大小
eval $query > "$logFile" 2>&1 //執行字串
else
eval $query >> "$logFile" 2>&1 //執行字串
fi
else
echo 'script is runing' >> "$logFile"
fi
exit 0 //正常執行後並退出