[Shell] swoole_timer_tick 与 crontab 实现定时任务和监控
手动完成 "任务" 和 "监控" 主要有下面三步:
1. mission_cron.php(定时自动任务脚本):
<?php
/**
* 自动任务 定时器 (5s 执行).
*
* swoole_timer_tick 解决秒级定时;
* 如需调整,注意配置路径 和 mission_cron_monitor.
*
* Daemon Run:
* ./mission_cron_monitor
*
* Foreground Run:
* php mission_cron.php
*
* Stop:
* kill -9 PID
*
* @farwish.com
*/ swoole_timer_tick(5000, function() {
// 查询结果
// 事务性更新
// 记录日志
// 输出结果
}
2. mission_cron_monitor (由 crontab 运行,监控上述脚本):
#/bin/bash
# 监控定时器,断掉重启.
#
# crontab used in /var/spoor/cron/
# ( crontab -e )
#
# @farwish.com phpbin=/usr/local/php7/bin/php
curdir=`dirname $`
script=${curdir}/mission_cron.php
process=`ps aux | grep -v grep | grep ${script}` if test -z "$process"; then
nohup ${phpbin} ${script} > /dev/null >& &
fi
这里 curdir 没有使用 `pwd`,原因在于 pwd 获取的是当前所在工作目录,非执行的脚本所在目录,你可以通过 man 获得详细解释。
pwd - print name of current/working directory
dirname - strip last component from file name
nohup的作用在于不受终端挂断影响,配合 & 后台运行,完美实现了 daemon.
3. 设置用户级 cron 脚本.
# 用户级运行cron.
# 分 时 日 月 周 命令
# @farwish.com # 每分钟执行
*/ * * * * /home/www/project/mission_cron_monitor
完成以上三步,主要工作就完了,可以运行查看效果了;
重申:mission_cron.php 任务不一定要包在 swoole_timer_tick 回调函数内,仅在执行 秒/毫秒 定时需要。
脚本虽然简单,但是有一些问题需要当心,如下:
1. 排错:任务有没有执行通过看日志 /var/log/cron 是否有执行记录,
有执行的话就是脚本问题,语法错误或者其它。注意,脚本中一律使用绝对路径。
2. 级别:系统级任务 /ect/crontab
用户级任务 直接用 crontab -e 编辑(存放位置 /var/spoor/cron/weichen)
程序级任务 swoole_timer_tick(1000, function() {});
3. 选项:crontab -e
crontab -l # 当前用户拥有的 cron
crontab -r # 删除当前用户的 cron
crontab -ri # 删除前先询问
更多 crontab -h
Link:http://www.cnblogs.com/farwish/p/6230728.html
[Shell] swoole_timer_tick 与 crontab 实现定时任务和监控的更多相关文章
- linux shell 之 crontab(定时任务)详解
1.定义: crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行.该词来源于希 ...
- crontab的定时任务不能自动执行,但是手动执行脚本一直能成功
crontab 问题小记: 环境变量问题, 养成良好的习惯, 在脚本开头export PATH 原因是 crontab 执行定时任务时,用的不是系统环境变量,而是自己的环境变量,可以把 echo $P ...
- shell实例利用crontab自动清除日志
shell实例利用crontab自动清除日志 程序运行会产生很多的日志,对于无用的日志手动删除比价麻烦,写一个自动执行的命令是很有必要的. 删除文件shell命令 find 对应目录 -mtime + ...
- linux利用crontab设置定时任务运行jar包
参考链接: 1.http://blog.csdn.net/javadhh/article/details/42779505 2.http://blog.csdn.net/cctv_liu/articl ...
- 第十五章 例行性工作(crontab)--循环执行的例行性工作调度 crontab(定时任务)
循环执行的例行性工作调度 crontab(定时任务) 15.1 例行性工作调度 不考虑硬件与服务器的链接状态,Linux帮助提醒很多任务. Linux例行性工作是如何进行调度的? Linux调度就是通 ...
- CentOS Linux使用crontab运行定时任务详解
参考博文: (总结)CentOS Linux使用crontab运行定时任务详解
- crontab部署定时任务
1.安装cron工具:apt-getinstall cron 2.开启定时任务:crontab –e 定时任务语句格式为:执行周期+命令. 周期有5个域,分别是分,时,日(day of month), ...
- 180605-Linux下Crontab实现定时任务
Linux下Crontab实现定时任务 基于Hexo搭建的个人博客,是一种静态博客页面,每次新增博文或者修改,都需要重新的编译并发布到Github,这样操作就有点蛋疼了,一个想法就自然而然的来了,能不 ...
- Ubuntu下使用crontab部署定时任务
Ubuntu下使用crontab部署定时任务 安装cron apt-get install cron 开启crontab日志 默认情况下的日志是没有开启的,我们需要找到 /etc/rsyslog.d/ ...
随机推荐
- SQL数据库与excel表格之间的数据 导入 导出
- IPv6测试环境
1.准备机器 三台PC机器,通过1个hub连接,1台windows,安装成双网卡,1个网卡连接外网,1个网卡连接IPv6环网.系统版本:xp sp3 for japan 2台linux机器.操作系统版 ...
- HPUX 只取syslog.log当前三天的信息
LOG_DAYS=1todays_date=`date +%m:%d:%Y`current_date=`echo $todays_date | sed 's/://g'`day=`echo $toda ...
- maven依赖关系中Scope的作用
目前<scope>可以使用5个值: (1) compile (编译) compile是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范围.编译范围依赖在所有的classpat ...
- table 固定表头
1 .table { border-collapse: collapse; } .table th { display: table-cell; } .fixedThead {//thead disp ...
- C#网络编程二:Socket编程
一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...
- 安装好oracle后,打开防火墙遇到的问题!
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT -A INPUT -j REJECT --reject-with ...
- Java垃圾回收机制 入门
对于Java虚拟机的了解,我认为是一个Java程序员已经入门的重要标志,而JVM中的垃圾回收机制(Garbage Collection,简称GC)又是JVM中的重点,所以hans在这里用篇文章时间和大 ...
- Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework的依赖注入和控制反转
Dependency Injection and Inversion of Control 1.概述: 1.1相关概念 bean:由IoC容器所管理的对象,也即各个类实例化所得对象都叫做bean 控制 ...
- Spring Framework------>version4.3.5----->Reference学习心得----->总结
1.Spring Framework概述: 有很多可用版本,网址http://projects.spring.io/spring-framework/ 2.Spring Framework ...