#!/bin/sh

#

#cli根目录

#以#开头的行是注释,但注意,第一行#!不是注释,是指定脚本的解释文件

clidir=/home/dev/web

#定义了一个名为clidir变量,注意=两端不能有空格

#启动短信

function start_sms()

#定义函数

{

number=`ps -eaf | grep sendsms.sh | grep -vc grep`

#检测守护进程是否已经运行

#ps -eaf | grep sendsms.sh | grep -vc grep 统计包含sendsms.sh字符且不包含grep字符的进程有多少条

#grep -vc v 显示不包含匹配文本的行 c 统计符合条件的行

#检测是否已经开启

if [ $number -eq 0 ]; then

#判断守护进程的数量是否等于0

# -eq 等于

# 注意:数值判断和字符判断使用的操作符不一样

# 字符串判断

# str1 = str2      当两个串有相同内容、长度时为真

# str1 != str2      当串str1和str2不等时为真

# -n str1        当串的长度大于0时为真(串非空)

# -z str1        当串的长度为0时为真(空串)

# str1         当串str1为非空时为真

# 数字的判断

# int1 -eq int2     两数相等为真

# int1 -ne int2     两数不等为真

# int1 -gt int2     int1大于int2为真

# int1 -ge int2     int1大于等于int2为真

# int1 -lt int2     int1小于int2为真

# int1 -le int2     int1小于等于int2为真

# 文件的判断

# -r file      用户可读为真

# -w file      用户可写为真

# -x file      用户可执行为真

# -f file      文件为正规文件为真

# -d file      文件为目录为真

# -c file      文件为字符特殊文件为真

# -b file      文件为块特殊文件为真

# -s file      文件大小非0时为真

# -t file      当文件描述符(默认为1)指定的设备为终端时为真

# 逻辑判断

# -a         与

# -o        或

# !         非

/bin/sh ${clidir}/cli/queue/sendsms.sh &

#启动守护进程

# & 符号 表示在后台运行

echo 'service queue to sendsms start running'

else

echo 'service queue to sendsms already running'

fi

return $?;

}

#停止短信

function stop_sms()

{

number=`ps -eaf | grep sendsms.sh | grep -vc grep`

#检测守护进程是否已经关闭

if [ $number -eq 0 ]; then

echo 'service queue to sendsms already stopped'

else

#关闭守护进程

for pid in $(ps -ef | grep sendsms.sh | grep -v grep | awk '{print $2}'); do

#ps -ef | grep sendsms.sh | grep -v grep | awk '{print $2}' 逐行读取包含sendsms.sh且不包含grep的进程id

#awk 逐行读取文本,并以空格(默认)分割每行,$1表示分割出的第一个元素,$2表示第二个... $0表示所有元素

kill -9 $pid &> /dev/null

#kill -9 $pid 杀死指定进程id的进程

done

echo 'service queue to sendsms has stopped'

fi

pid_sms=`ps -ef | grep sendsmsAction | grep -vc grep`

if [ $pid_sms -gt 0 ]; then

kill -9 $(ps -ef | grep sendsmsAction | grep -v grep } awk '{print $2}') &> /dev/null

fi

return $?

}

#查看状态

function status()

{

echo "sendsms :" `ps -ef | grep sendsmsAction | grep -v grep | awk '{print $2 , $8, $9, $10, $11}'`

echo "sendemail :" `ps -ef | grep sendemailAction | grep -v grep | awk '{print $2 , $8, $9, $10, $11}'`

return $?

}

#查看守护进程状态

function sh_status()

{

echo -e "sendsms :" `ps -eaf | grep sendsms.sh | grep -v grep | awk '{print $2 , $8, $9, $10, $11}'`

echo "sendemail :" `ps -eaf | grep sendemail.sh | grep -v grep | awk '{print $2 , $8, $9, $10, $11}'`

return $?

}

case "$1" in

start)

if [[ "$2" == "sendsms" ]]; then

start_sms

elif [[ "$2" == "sendemail" ]]; then

start_email

else

start_sms

start_email

fi

;;

stop)

if [[ "$2" == "sendsms" ]]; then

stop_sms

elif [[ "$2" == "sendemail" ]]; then

stop_email

else

stop_sms

stop_email

fi

;;

shstatus)

sh_status

;;

status)

status

;;

*)

echo $"Usage: $0 {start|stop|status|shstatus}"

exit 2

esac

exit $?

2.[代码]守护脚本#!/bin/bash

#守护进程脚本

#守护脚本比较简单 每隔一段时间执行一次任务 每次执行前 检测是否有还在执行的任务

selfpath=`dirname $0`

#$0 特殊变量 文件路径

cd $selfpath;

cd ../../

phpExec=/opt/app/php5/bin/php

while [[ true ]]; do

number=`ps -ef | grep 'sendsmsAction' | grep -vc grep`

if [ $number -eq 0 ]; then

#每次执行任务 判断是否还有正在执行的任务

$phpExec cli.php queue sendsmsAction &

fi

sleep 1m

#间隔时间

done

声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理

linux脚本定时任务,使用Linux脚本执行定时任务相关推荐

  1. mac linux 计划任务,Mac上,执行定时任务:launchctl

    在Mac上定时执行任务 在Mac上,执行定时任务,有两种方式: 使用launchctl 沿袭Linux常用的crontab命令 毕竟咱是在mac上开发,这里只讲launchctl的用法 1.首先需要编 ...

  2. linux 普通用户crond,linux下普通用户的定时任务

    参考: crontab命令详解 mail用法(使用mail查看定时任务执行情况) centos系统禁止普通用户使用crontab命令 普通用户定义crontab定时任务: 比如oracle用户定义一个 ...

  3. (shell脚本编程)linux如何利用脚本执行多条命令以及linux如何执行定时任务

    文章目录 shell脚本编程 条件语句 脚本执行多条命令 执行定时任务 本文着重于提高我们的生产力,所以将这几个作为了一个专题. shell脚本编程 脚本中不同语句用分号隔开,和c语言一样. for, ...

  4. linux crontab 定时任务 计划任务 不执行 原因

    前言 最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这几个原因: 1 crond服务未启动 crontab不是Linux内核的功能,而是依赖一个cr ...

  5. Linux执行定时任务(crontab)遇到的坑

    文章目录 前言: 1.建立定时任务的两种方式 1.1.crontab -e 1.2.vi /etc/ crontab 2.两种方法的区别 2.1.用户级 2.2.系统级 3.解决办法 前言: 之前第一 ...

  6. linux使用flock文件锁解决脚本周期内未执行完重复执行

    linux使用flock文件锁解决脚本周期内未执行完重复执行 关于flock flock 是对于整个文件的建议性锁.也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的.( ...

  7. php linux脚本文件,Unix/Linux中如何直接执行PHP脚本文件?

    使用Linux系统的服务器都有搭建完整的PHP环境,因此有些用户会用PHP去写一些执行自动化任务的脚本,可是发现每次执行PHP脚本都需要使用php myscript.php的方式,感觉有点麻烦.其实我 ...

  8. 详解在 Linux 启动时,如何自动执行命令或脚本

    2019独角兽企业重金招聘Python工程师标准>>> 我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后 ...

  9. linux用户开机.bashrc,验证linux shell在启动时会自动执行用户主目录下的.bashrc脚本...

    在本文中, 我们来一起验证linux shell在启动时会自动执行用户主目录下的.bashrc脚本(注意是.bashrc而不是bashrc). 如果你的主目录下没有.bashrc, 那也不要担心,自己 ...

  10. linux命令写成sh脚本并执行

    unrar.sh脚本编写为: 该脚本功能是转到/home目录下,将/1.rar压缩包解压到当前文件夹/home下(123456为解压密码) #!/bin/sh cd /home unrar e -p1 ...

最新文章

  1. Palo Alto 防火墙升级 Software
  2. UVA - 11478 Halum 二分+差分约束
  3. Vue.js入门第一课
  4. 【Canal源码分析】TableMetaTSDB
  5. Java中怎样根据对象list的某对象的属性进行分组
  6. java element 获取属性_java 获取类,属性变量,方法,方法参数上注解的值等
  7. powerdesigner导出sql时自动生成注释
  8. mysql 酒店管理设计_酒店管理系统的设计与实现(Myeclipse,MySQL)
  9. centos光盘修复引导_CentOS 6.5 修复grub引导
  10. Springboot之添加本地模块依赖
  11. 从零开始的FPGA学习4-比较器、全加器
  12. 基于java+SpringBoot+HTML+Mysql社区管理系统(小区管理系统)
  13. 教学向|ZB利用分组Dynamesh,对模型进行重建细分!
  14. Bombermaaan-最好的开源炸弹人游戏(支持AI人机对战,SFC复刻版)
  15. TOM邮箱布局商务市场,致力打造更全能的邮箱办公产品!
  16. · 电动汽车(EV)充电标准及其差异
  17. 怎样录制gif动态图
  18. matplotlib绘制多维度分类散点图
  19. 龙佰集团拟35亿投建20万吨锂电负极项目 钛白粉龙头转型可期
  20. queryWrapper对同一字段进行两次eq() 是覆盖还是叠加查询

热门文章

  1. 肝!深度讲解Python四大常用绘图库的“绘图原理”
  2. 全球IPv4地址正式耗尽,你知道吗?
  3. 机器学习-分类算法-逻辑回归13
  4. 树莓派摄像头基本操作
  5. ACM数论之旅2---快速幂,快速求a^b
  6. (译文)JavaScript基础——JavaScript中的深拷贝
  7. 通过rpm安装postgresql-9.6无法远程连接的问题
  8. C#使用Gecko实现浏览器
  9. CentOS7静默安装oracle11g
  10. PyCharm 3.0 发布,提供免费开源版本