针对cli模式下的php运维脚本

需求场景

经常会用php定期执行一些任务,于是使用cli方式运行php,加入个死循环即可,但是不知道为什么php脚本会经常无故死掉,所以写了个sh脚本,结合系统的cron来实现监控。cron每分钟执行一次,如果进程存在则跳过,反之则执行。

#!/bin/bash
ps -fe|grep "/home/ayhome/push/index.php cli/index/index" |grep -v grep
if [ $? -ne 0 ]
then
  echo "start process....."
  nohup /www/wdlinux/php/bin/php /home/ayhome/push/index.php cli/index/index &
else
  echo "runing....."
fi

扩展

  • 需要自定义更多的参数,例如指定执行 模块、控制器、方法 即 m c a 参数
  • 根据参数列出所有进程
  • 结束 根据参数列出的所有进程
  • 重启 根据参数列出的进程
  • 指定进程数

为了完成以上要求,重新脚本如下。

#!/bin/bash
#---------------------------------------------
if [ $# -lt 2 ]
then
  echo "Error! Not Enough Arguments."  #默认情况下不让执行
  echo "$0 $@"
  exit 1
fi
#
# 定义变量
#
#---------------------------------------------
p=index.php; #脚本文件
m=index;         
c=index;         
a=index;           
l=1;  #循环次数
k='';  #操作 默认为空  kill 表示杀死指定进程 list 表示列出进程
r='';  
d='';  
s='';  
#---------------------------------------------
# h:help
# p:path defautl index.php
# k:kill restart test
# s:start
# d:down
# r:restart
while getopts "m:c:a:l:h:k:p:s:d:r:" opt
do 
  case $opt in
    k) 
      k=$OPTARG
      ;;
    p) 
      p=$OPTARG
      ;;
    m) 
      m=$OPTARG
      ;;
    c) 
      c=$OPTARG
      ;;
    a) 
      a=$OPTARG
      ;;
    l) 
      l=$OPTARG
      ;;
    h) 
      echo "Usage : sh cron -m index[default] -c index[default] -a index[default] -l 1[default]"
      ;;
    *)
      echo "Usage : sh cron -m index[default] -c index[default] -a index[default] -l 1[default]"
      ;;
  esac
done
psc="/www/wdlinux/php/bin/php /home/ayhome/wiwid/$p $m/$c/$a";

# 获取进程号
sn=`ps -ef|grep "$psc" |grep -v grep|awk '{print $2}'`;

# 列出所有进程
if [[ $k = "list" ]]; then
  ps -fe|grep "$psc" |grep -v grep
  exit
elif [[ $k = "kill" ]]; then   #杀死所有进程
  # 先判断是否有进程
  if [[ "${sn}" = "" ]]; then
    echo 'no runing'
  else
    ps -eaf |grep "$psc" | grep -v "grep"| awk '{print $2}'|xargs kill -9
    echo 'kill all'
  fi
  exit
elif [[ $k = "restart" ]]; then #重启进程
  ps -eaf |grep "$psc" | grep -v "grep"| awk '{print $2}'|xargs kill -9
  echo 'restart'
elif [[ $k = "test" ]]; then
  $psc
  exit
fi

if [ "${sn}" = "" ]    #如果为空,表示进程未启动
then
  for (( i = 0; i < $l; i++ )); do
    nohup $psc &
  done
  echo start ok !
else
  if [[ $k = "kill" ]]; then
    kill 9 $sn
    echo 'kill'
  else
    echo 'runing'
  fi
fi

转载于:https://my.oschina.net/ayhome/blog/888582

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值