php定时器,js定时器以及linux脚本定时器技术总结
来源:互联网 发布:2g神优化单机游戏 编辑:程序博客网 时间:2024/05/18 02:19
php定时器实现方案
以前对se特别感兴趣,但是自己又不会Java,lucene等搜索引擎开发工具,于是不断挖掘PHP的功效。
最后发现php也可以做抓取,并且原理很易:直接获取页面源文件,然后通过正则或字符串的参照截取来获取需要的信息。但是性能上不能和搜索引擎的多线程抓取相比。
实现了上一步之后,又思考着,如果抓取可以自动定时获取,那么人工运行可执行页面也就省下来了。
后来也在一些php开源程序中了解到关于"计划任务"的效果:可以定时运行某程序,比如数据库备份,更新缓存,生成静态页面,生成网站地图等。
最近由于项目需要定时更新远程数据库到本地,网上搜了搜,还真找到了。
ignore_user_abort();函数搭配set_time_limit(0);和sleep($interval);即可实现以上自动更新。
先给出一个基本的范式,其中有个人的测试程序:
<?php
ignore_user_abort(); // run script. in background
set_time_limit(0); // run script. forever
$interval=30; // do every 15 minutes...
do{
$fp = fopen('text3.txt','a');
fwrite($fp,'test');
fclose($fp);
sleep($interval); // wait 15 minutes
}while(true);
?>
首先运行该程序,然后关闭该页面,程序仍然运行中,test会每隔30秒的填补到text3.txt文件。
实现效果如图:(略)
最后根据php手册简单介绍一些相关的知识:
1.连接处理:
在 PHP 内部,系统维护着连接状态,其状态有三种可能的情况:
0 - NORMAL(正常)
1 - ABORTED(异常退出)
2 - TIMEOUT(超时)
当 PHP 脚本正常地运行 NORMAL 状态时,连接为有效。当远程客户端中断连接时,ABORTED 状态的标记将会被打开。远程客户端连接的中断通常是由用户点击 STOP 按钮导致的。当连接时间超过 PHP 的时限时,TIMEOUT 状态的标记将被打开。
可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断时脚本将会退出。该处理过程可由 php.ini 的 ignore_user_abort 或由 Apache .conf 设置中对应的"php_value ignore_user_abort"以及 ignore_user_abort() 函数来控制。如果没有告诉 PHP 忽略用户的中断,脚本将会被中断,除非通过 register_shutdown_function() 设置了关闭触发函数。通过该关闭触发函数,当远程用户点击 STOP 按钮后,脚本再次尝试输出数据时,PHP 将会检测到连接已被中断,并调用关闭触发函数。
脚本也有可能被内置的脚本计时器中断。默认的超时限制为 30 秒。这个值可以通过设置 php.ini 的 max_execution_time 或 Apache .conf 设置中对应的"php_value max_execution_time"参数或者 set_time_limit() 函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调用 connection_status() 函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回 2。
需要注意的一点是 ABORTED 和 TIMEOUT 状态可以同时有效。这在告诉 PHP 忽略用户的退出操作时是可能的。PHP 将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数 connection_status() 返回 3。
2.相关函数:
PHP ignore_user_abort() 函数
PHP 杂项函数
定义和用法
ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。
本函数返回 user-abort 设置的之前的值(一个布尔值)。
语法
ignore_user_abort(setting)参数 描述 setting可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行。
如果未设置该参数,会返回当前的设置。
提示和注释
注释:PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止。简单地使用 echo 语句无法确保信息发送,参阅 flush() 函数。
set_time_limit(0);
括号里边的数字是执行时间,如果为零说明永久执行直到程序结束,如果为大于零的数字,则不管程序是否执行完成,到了设定的秒数,程序结束
int connection_aborted ( void )
Returns TRUE if client disconnected.
int connection_status ( void )
Returns the connection status bitfield.
js定时器实现方案
如何使用setInterval来制作网页停留时间。效果如下图
我用了一个div加一个span标签来显示
首先你要加入一个样式
样式来控制div框的样子
然后就是javascript代码
如上图所示,代码为什么不给大家复制上,是为了让大家来自己打,这样有利于记忆。
这里var a = setInterval(h,1000);
参数说明:
h是要运行的函数
1000是运行的时间,就每隔多少毫秒运行一次那个函数。
linux定时器实现方案
crontab定时器(包括执行shell)如果要让unix系统重复,定期做一件事,我们就会用到crontab.
实质上真正去执行每一个重复任务的是cron,cron是的unix家族的一个后台常驻程序,cron是由cron文件来驱动的,crontab只是用来管理cron文件的,比如给cron file里面添加任务,删除任务,文件里记录了要执行的任务,以及其"时间规则"
crontab的作用,正如crontab的man文档中写的: maintain crontab files for individual users
crontab提供给我们的接口
我们是不需要去直接编辑cron file,修改查看cron file都应该使用crontab
限制用户使用crontab的文件有:/etc/cron.allow /etc/cron.deny 。当使用crontab建立工作排程后,将被记录到/var/spool/cron里。#注意是写入到用户的那个文件中,例如,用户 Jeff 的定时任务会写入到/var/spool/cron/jeff。cron执行的每一项工作都被记录到/varlog/cron里去。crontab参数:crontab [-u username] [-l|-e|-r]-u:只有root才可能,帮其他用户建立或移除工作排程。-l:查阅crontab的工作内容-r:移除所有的crontab的工作内容,移除一项,用-e : 编辑。万不能使用 vi 直接编辑这个文件,因为直接编辑不能检查语法错误例1:每天12:00给root发信。[root@lyy etc]# crontab -e #用vi编辑0 12 * * * mail root -s "at 12:00" < /root/.bashrc每项工作有六个字段分别是:分钟 小时 日期 月份 周 指令0-59 0-23 1-31 1-12 0-7 指令 #0和7都代表星期天辅助特殊字符:* (星号)代表任何时刻,(逗号)代表分隔时候。如3点与6点 就是3,6-(减号)代表一段时间范围内。如:3点到6点 就是3-6/n(斜线)n代表数字,即每隔n单位。如每隔五分钟,/5示例:* * * * * cmd
* * * * * sleep 20; cmd
* * * * * sleep 40; cmd
#上面就是每 20 秒运行一次 cmd 的 Crontab 的做法。例2:每隔3分钟,在屏幕输出字符# crontab -e# crontab -l*/3 * * * * echo "hello world !!!!!" > /dev/pts/0 #pts/0是用telnet的终端接口查看一下记录# cat /var/log/cronDec 12 20:27:01 lyy crond[9865]: (root) CMD (echo "hello world !!!!!" > /dev/pts/0)Dec 12 20:30:01 lyy crond[9908]: (root) CMD (echo "hello world !!!!!" > /dev/pts/0)例3:每个星期三下午14:30分发送一个邮件给pccrontab -e30 14 * * 3 mail pc -s "test" < /home/text.txtcrontab -e 是针对用户的cron设计的,如果是系统例行性任务,只要编辑/etc/crontab文件就可以了。查看/etc/crontab内容# cat /etc/crontabSHELL=/bin/bash #接口PATH=/sbin:/bin:/usr/sbin:/usr/bin #执行路径搜寻MAILTO=root #以mail发送者HOME=/ #家目录# run-parts01 * * * * root run-parts /etc/cron.hourly #每小时02 4 * * * root run-parts /etc/cron.daily #每天22 4 * * 0 root run-parts /etc/cron.weekly #每周日42 4 1 * * root run-parts /etc/cron.monthly #每个月1号取消不要的输出项目:把输出的结果以命令重导向到/dev/null安全检验:由于一些木马以例行命令方式值入,所以可以通过检查/var/log/cron来发现。周与日月不可同时并存如: www.2cto.com30 12 11 9 5 root echo "just test " #这是错误的写法。本来以为九月十一号是星期五执行这个任务,但是系统可能会判定每个星期五执行一次或每年九月十一号分别执行。唤醒停机期间的工作任务 anacronanacron不能取代crontab,它存在目的是处理非24小时在线的linux系统的 crontab的执行。它是以天为单位或在开机后执行,它会检查停机期间的crontab并执行,然后就自动停止了。linux命令:建立任务crontab -e*/1 * * * * echo 'ddd'/var/test.txt 一分钟写一次ddd到test.txt文件中* * * */1 * sh /var/jboss-4.0.5.GA/server/default/log/temp/delete_log1.sh 一个月运行一次delete_log1.sh脚本sh脚本(delete_log1.sh)dd=`date -d"1 month ago" +%y-%m`rm -vf /var/temp/log.20$dd-* 删除当前时间的起一个月的匹配文件本文为整理汇总,相关技术参考以下文章:shell定时器-crontab : http://blog.csdn.net/magoyang/article/details/52186395详谈 php定时器 : http://blog.csdn.net/qq1355541448/article/details/13505479
- php定时器,js定时器以及linux脚本定时器技术总结
- js定时器总结
- 定时器以及定时器事件
- linux 定时器总结
- linux定时器总结
- linux定时器总结
- 定时器
- 定时器
- 定时器
- 定时器
- 定时器
- 定时器
- 定时器
- 定时器
- 定时器
- 定时器
- 定时器
- 定时器
- maven更新包问题
- 前端基础--html基础篇
- LeetCode 461. Hamming Distance
- Ubuntu 16.04安装有道词典
- Spring—Quartz定时调度CronTrigger时间配置格式说明与实例
- php定时器,js定时器以及linux脚本定时器技术总结
- docker 运行的新容器不能使用常规的命令
- 【LeetCode】133. Clone Graph
- ubuntu下多用户ssh私有登录
- Android NullPointerException FragmentHostCallback.getHandler()
- Cocos2d-x 2.2.3 使用NDK配置编译环境
- Java中hashCode的作用
- $.extend
- 上传,解析Excel文件并保存数据到数据库