之前学过shell脚本,但是工作中一直没有用到,今天由于要搞一个定时任务,为了防止重复启动php脚本,就需要写一个shell,
学到的东西终于用到了,用记住的那些知识点写了这个脚本,在此记录备注说明一下,希望能够帮助大家回忆起一些相关知识点。
下面是脚本内容:
*************************************
#!/bin/bash //声明要使用哪个shell
下面是备注文件 这可是一个好习惯奥
# 运行第三方分享脚本shell
# Copyright (c) 2012, Jiehun.com.cn Inc. All Rights Reserved# @author # @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=$1fi//定义函数
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 //执行字符串 fielse echo 'script is runing' >> "$logFile"fi exit 0 //正常执行后并退出