之前学过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 //正常执行后并退出