[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 $0`
script=${curdir}/mission_cron.php
process=`ps aux | grep -v grep | grep ${script}`

if test -z "$process"; then
    nohup ${phpbin} ${script} > /dev/null 2>&1 &
fi

这里 curdir 没有使用 `pwd`,原因在于 pwd 获取的是当前所在工作目录,非执行的脚本所在目录,有点区别。

nohup的作用在于不受终端挂断影响,配合 & 后台运行,完美实现了 daemon.

3. 设置用户级 cron 脚本.

# 用户级运行cron.
# 分 时 日 月 周 命令
# @farwish.com

# 每分钟执行
*/1 * * * * /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

时间: 2024-10-07 18:06:07

[Shell] swoole_timer_tick 与 crontab 组合实现定时任务和监控的相关文章

[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_cr

单独运行shell脚本与crontab运行shell脚本的区别

crontab运行脚本存在两大问题:环境变量和路径,从而导致单独运行脚本没问题,但用crontab运行就报错. 1.环境变量 描述问题:crontab: usage error: no arguments permitted after this option 因为crontab不提供环境,所以需要自己在shell中加入,或者全部用绝对路径.简单的方法:控制台输入 [[email protected] ~]# echo $PATH /your/path/1:/your/path/2------

linux下使用crontab命令执行定时任务

最近因工作技术问题,难以解决生产日志第二天不打印问题,日志原因解决不了,于是想起了使用定时任务明天重启服务,网上百度了一下,使用crontab命令可以完成定时任务, 大家其实不用记住太多,使用xshell或者ssh进入命令行,敲击crontab -e进入定时任务的编辑模式, 0 5 * * *  /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin/stopWeblogic.sh 0 6 * * *  /ho

cronmon 定时任务执行状态监控

cronmon是一个计划任务(定时任务)监控系统,可以对循环执行的程序和脚本进行监控告警,当其未按照预期执行时,发送邮件到对应邮箱进行通知.同时可以将监控任务划分到不同业务下面,每个业务可以分配不同的通知人,建立业务.通知人和监控任务的多层级关系.        通过以一定的间隔发送HTTPS请求到特定的URL实现监控.如果URL未按时接受到请求,对应的业务通知人则会收到告警.        也就是说,你可以在你的计划任务或者程序脚本中,根据执行结果进行条件判断,如果成功则发送请求到cronmo

shell脚本+mysql数据库组合进行数据安全监控

shell脚本 + mysql数据库 实现企业级会话边界控制器文件解析并告警 dirsx30001.sh处理文件,生成mysql备份文件的方式进行导入 #/bin/bash ##环境变量 path=/home/sbclog/sx30001 ##由于抓取的日志文件中没有年份参数,故导入系统年份参数,以达到数据库时间字段datetime ##也可以抓取tar包的名字中的字段 date_year=`date|cut -c 25-` #test ! -e $path/*.tar &&echo &q

使用python crontab设置linux定时任务

熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用程序部署时等.有需求当然就得想办法解决,不然在程序猿界混(一群自得其乐的猿). 下面进入正题,开始想通过以写文件的形式设置,通过在配置文件中直接追加一行即可.但是读写文件难免有点繁琐,再比如:设置任务时要检查任务是否已经存在:根据输入参数设置相应的任务等.以读写文件难免不太合适.所以想到了"万能&q

详解使用python crontab设置linux定时任务

熟悉linux的朋友应该知道在linux中可以使用crontab设置定时任务.可以通过命令crontab -e编写任务.当然也可以直接写配置文件设置任务. 但是有时候希望通过脚本自动设置,比如我们应用程序部署时等.有需求当然就得想办法解决,不然在程序猿界混(一群自得其乐的猿). 下面进入正题,开始想通过以写文件的形式设置,通过在配置文件中直接追加一行即可.但是读写文件难免有点繁琐,再比如:设置任务时要检查任务是否已经存在:根据输入参数设置相应的任务等.以读写文件难免不太合适.所以想到了“万能”的

Mac下使用crontab来实现定时任务

说明: 1.Linux和Mac下操作crontab都是一致的 2.配置文件都在/etc/crontab下,如果没有就创建. 3.测试发现直接使用crontab -e命令创建的定时任务是放在临时文件夹的,重启会删除,并且与/etc/crontab文件无关联. 实际操作: 查看 crontab 是否启动 sudo launchctl list | grep cron 检查需要的文件 $ LaunchAgents ll /etc/crontab ls: /etc/crontab: No such fi

[转帖]crontab 详细用法 定时任务

转自:http://blog.chinaunix.net/uid-25785357-id-3434344.html 使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令.例如系统管理员安排一个备份任务使其每天都运行 如何往 cron 中添加一个作业? # crontab –e0 5 * * * /root/bin/backup.sh 这将会在每天早上5点运行 /root/bin/backup.sh Cron 各项的描述 以下是 crontab 文件的格式: {min