[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/ ...
随机推荐
- python读取excel数据,并可视化展现
#-*- coding: utf-8 -*- import pandas as pda import matplotlib.pyplot as pyl import matplotlib.font_m ...
- C# Datatable group by 查询
操作Datatable group by 查询 //获取统计图形数据 var dicleft = new Dictionary<string, DataTable>(); ].AsEn ...
- Ubuntu 查看和杀死进程
1.ps -e 2.netstat -antup 3.kill pid 4.pgrep 进程名 5.killall 进程名 6.kill -9 pid
- 磁盘阵列(RAID)实例
raid技术分类可以分为基于软件raid技术和基于硬件raid技术 raid又分为raid-0.raid-1.raid-5和raid-10 Raid有”廉价磁盘冗余阵列”的意思,就是利用多块廉价的硬盘 ...
- 滴滴与Uber的竞争分析
滴滴与Uber的竞争分析 随着互联网时代的到来,智能手机的普及,互联网不再是一个完全虚拟的东西,它开始慢慢地融入到我们的生活中来.这些年我们可以明显地感受到我们的生活方式在一天天发生着变化,我们也逐渐 ...
- AngularJS 1.2.x 学习笔记(表单校验篇)
https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...
- C++中extern关键字用法小结
总结C++中关于extern关键字的用法. 1.变量的生明和定义中 C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译.为了将程序分为许多文件,则需要在文件中共享代码 ...
- linux学习4 网络命令和关机重启
网络命令 write write 用户名 回车后输入信息 以 ctrl+d 保存结束 wall wall [message] //that is all,发送给所有人 ping ping 选项 IP地 ...
- 更新lispbox中的ccl和slime版本
首先C-x C-f然后输入~,找到.emacs文件,根据slime官方文档说明的添加如下代码到文件末尾,重启一下emacs,slime就编译好了,然后这段代码就可以删除.否则每次启动emacs就算不用 ...
- ORA-01033: ORACLE 正在初始化或关闭 进程 ID: 0 会话 ID: 0 序列号: 0
用了很长时间的数据库,一直都挺好,今天早上一来报这个错,开始追究原因. 1.用SYS用户登录: 2.将数据库修改为打开状态,alter database open,出现如下的错误提示: ORA-160 ...