手动完成 "任务" 和 "监控" 主要有下面三步:

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 实现定时任务和监控的更多相关文章

  1. linux shell 之 crontab(定时任务)详解

    1.定义: crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行.该词来源于希 ...

  2. crontab的定时任务不能自动执行,但是手动执行脚本一直能成功

    crontab 问题小记: 环境变量问题, 养成良好的习惯, 在脚本开头export PATH 原因是 crontab 执行定时任务时,用的不是系统环境变量,而是自己的环境变量,可以把 echo $P ...

  3. shell实例利用crontab自动清除日志

    shell实例利用crontab自动清除日志 程序运行会产生很多的日志,对于无用的日志手动删除比价麻烦,写一个自动执行的命令是很有必要的. 删除文件shell命令 find 对应目录 -mtime + ...

  4. linux利用crontab设置定时任务运行jar包

    参考链接: 1.http://blog.csdn.net/javadhh/article/details/42779505 2.http://blog.csdn.net/cctv_liu/articl ...

  5. 第十五章 例行性工作(crontab)--循环执行的例行性工作调度 crontab(定时任务)

    循环执行的例行性工作调度 crontab(定时任务) 15.1 例行性工作调度 不考虑硬件与服务器的链接状态,Linux帮助提醒很多任务. Linux例行性工作是如何进行调度的? Linux调度就是通 ...

  6. CentOS Linux使用crontab运行定时任务详解

    参考博文: (总结)CentOS Linux使用crontab运行定时任务详解

  7. crontab部署定时任务

    1.安装cron工具:apt-getinstall cron 2.开启定时任务:crontab –e 定时任务语句格式为:执行周期+命令. 周期有5个域,分别是分,时,日(day of month), ...

  8. 180605-Linux下Crontab实现定时任务

    Linux下Crontab实现定时任务 基于Hexo搭建的个人博客,是一种静态博客页面,每次新增博文或者修改,都需要重新的编译并发布到Github,这样操作就有点蛋疼了,一个想法就自然而然的来了,能不 ...

  9. Ubuntu下使用crontab部署定时任务

    Ubuntu下使用crontab部署定时任务 安装cron apt-get install cron 开启crontab日志 默认情况下的日志是没有开启的,我们需要找到 /etc/rsyslog.d/ ...

随机推荐

  1. SpringMVC学习笔记(三)

    一.SpringMVC使用注解完成 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--configure the setti ...

  2. cocos2d-js callFunc传参

    1.传递一个参数: pg.TestScene.prototype.init = function () { if (cc.Scene.prototype.init.call(this)) { var ...

  3. X86架构与ARM架构比较(摘录自网络)

    引言 CPU是怎样运作的? CPU的运作与人脑的运作差不多.先谈一下人这个系统的工作方式.眼镜.耳朵.舌头.皮肤等等感觉器官接收到"触觉",把信息传给大脑,大脑把信息处理后,把处理 ...

  4. Hcm data loader for cancel work relationship

    好好总结一下这个task.没有做好的东西:1.现有的资料和各种各样的工具没有很好的利用起来,造成了用了很多的时间去了解和自己学习.非常的不舒服的.下次要避免这样的浪费时间,学会在工作中学习.现在以及以 ...

  5. 企业级监控平台开发之nagios二次开发(七)

    背景: A公司里有很多服务器(>3000台),每台服务器都有不同的用途,如DB Server.WEB Server.ESXI等,每个组使用其中的一批,每个组可能有多个服务器管理员.现在问题出来了 ...

  6. Comet4J推技术在SSHE三大框架中应用-linux下亲测可用

    Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询.长连接.自动选择三种工作模式. 下载地址 co ...

  7. C++中类似C# region的功能

    使用#pragma region和#pragma endregion关键字,来定义可以展开和收缩的代码区域的开头和结尾, 可以把这些代码行收缩为一行,以后要查看其细节时,可以再次展开它. 例如: // ...

  8. angularjs(二)模板终常用的指令的使用方法

    通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的.ng的模板真是让我爱不释手.学习ng道路还很漫长,从模板 ...

  9. dojo布局(layout)

    使用BorderContainer和ContentPane实现布局 1.效果图如下: 2.HTML代码: <div id="appLayout" class="de ...

  10. Android剪贴板操作----ClipboardManager

    andrid developers java.lang.Object ---android.text.ClipboardManager ------android.context.ClipboardM ...