linux脚本定时任务,使用Linux脚本执行定时任务
#!/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脚本执行定时任务相关推荐
- mac linux 计划任务,Mac上,执行定时任务:launchctl
在Mac上定时执行任务 在Mac上,执行定时任务,有两种方式: 使用launchctl 沿袭Linux常用的crontab命令 毕竟咱是在mac上开发,这里只讲launchctl的用法 1.首先需要编 ...
- linux 普通用户crond,linux下普通用户的定时任务
参考: crontab命令详解 mail用法(使用mail查看定时任务执行情况) centos系统禁止普通用户使用crontab命令 普通用户定义crontab定时任务: 比如oracle用户定义一个 ...
- (shell脚本编程)linux如何利用脚本执行多条命令以及linux如何执行定时任务
文章目录 shell脚本编程 条件语句 脚本执行多条命令 执行定时任务 本文着重于提高我们的生产力,所以将这几个作为了一个专题. shell脚本编程 脚本中不同语句用分号隔开,和c语言一样. for, ...
- linux crontab 定时任务 计划任务 不执行 原因
前言 最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这几个原因: 1 crond服务未启动 crontab不是Linux内核的功能,而是依赖一个cr ...
- Linux执行定时任务(crontab)遇到的坑
文章目录 前言: 1.建立定时任务的两种方式 1.1.crontab -e 1.2.vi /etc/ crontab 2.两种方法的区别 2.1.用户级 2.2.系统级 3.解决办法 前言: 之前第一 ...
- linux使用flock文件锁解决脚本周期内未执行完重复执行
linux使用flock文件锁解决脚本周期内未执行完重复执行 关于flock flock 是对于整个文件的建议性锁.也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的.( ...
- php linux脚本文件,Unix/Linux中如何直接执行PHP脚本文件?
使用Linux系统的服务器都有搭建完整的PHP环境,因此有些用户会用PHP去写一些执行自动化任务的脚本,可是发现每次执行PHP脚本都需要使用php myscript.php的方式,感觉有点麻烦.其实我 ...
- 详解在 Linux 启动时,如何自动执行命令或脚本
2019独角兽企业重金招聘Python工程师标准>>> 我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情.按下开机键或启动一个虚拟机,你就启动了一系列事件,之后 ...
- linux用户开机.bashrc,验证linux shell在启动时会自动执行用户主目录下的.bashrc脚本...
在本文中, 我们来一起验证linux shell在启动时会自动执行用户主目录下的.bashrc脚本(注意是.bashrc而不是bashrc). 如果你的主目录下没有.bashrc, 那也不要担心,自己 ...
- linux命令写成sh脚本并执行
unrar.sh脚本编写为: 该脚本功能是转到/home目录下,将/1.rar压缩包解压到当前文件夹/home下(123456为解压密码) #!/bin/sh cd /home unrar e -p1 ...
最新文章
- Palo Alto 防火墙升级 Software
- UVA - 11478 Halum 二分+差分约束
- Vue.js入门第一课
- 【Canal源码分析】TableMetaTSDB
- Java中怎样根据对象list的某对象的属性进行分组
- java element 获取属性_java 获取类,属性变量,方法,方法参数上注解的值等
- powerdesigner导出sql时自动生成注释
- mysql 酒店管理设计_酒店管理系统的设计与实现(Myeclipse,MySQL)
- centos光盘修复引导_CentOS 6.5 修复grub引导
- Springboot之添加本地模块依赖
- 从零开始的FPGA学习4-比较器、全加器
- 基于java+SpringBoot+HTML+Mysql社区管理系统(小区管理系统)
- 教学向|ZB利用分组Dynamesh,对模型进行重建细分!
- Bombermaaan-最好的开源炸弹人游戏(支持AI人机对战,SFC复刻版)
- TOM邮箱布局商务市场,致力打造更全能的邮箱办公产品!
- · 电动汽车(EV)充电标准及其差异
- 怎样录制gif动态图
- matplotlib绘制多维度分类散点图
- 龙佰集团拟35亿投建20万吨锂电负极项目 钛白粉龙头转型可期
- queryWrapper对同一字段进行两次eq() 是覆盖还是叠加查询