定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起。
今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好。大家就将就看吧,
首先 简单介绍一下linux 例行性工作 两种方式,
主要有两种:
- at (和下面一样,只是它只定时执行一次就结束)
- crontab
演示定时执行php程序将数据插入数据库:
一个案例表:blog
CREATE TABLE `blog` (
`blog_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`blog_title` varchar(200) NOT NULL DEFAULT '' COMMENT '标题',
`blog_content` text NOT NULL COMMENT '内容',
`blog_time` int(10) unsigned NOT NULL DEFAULT '' COMMENT '时间',
`uid` int(10) unsigned NOT NULL COMMENT '用户id',
`cat_id` int(10) unsigned NOT NULL COMMENT '分类',
`blog_look` int(10) unsigned NOT NULL DEFAULT '' COMMENT '浏览量',
PRIMARY KEY (`blog_id`),
KEY `blog_time` (`blog_time`),
KEY `uid` (`uid`),
KEY `blog_look` (`blog_look`),
KEY `cat_id` (`cat_id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 COMMENT='文章表'
一个php文件:/www/123.php (请无视链接数据库面向过程函数,仅供演示)
1 <?php
2
3 $connect = mysql_connect('localhost','root','12315Smm');
4 mysql_select_db('mydb',$connect);
5 mysql_query('set names utf8',$connect);
6 $time=time();
7 $sql="INSERT INTO `blog` VALUES (null, '我是标题', '我是内容',{$time}, '1', '1', '0')";
8 mysql_query($sql,$connect);
9
10
执行 php /www/123.php 先插入一条数据测试代码是否正确。(ps : php是否加入环境变量, 可以执行php -v 测试 ,如没有请找到php程序位置执行,如 /usr/local/php/bin/php /www/123.php)
还有在执行时,可能会有提示错误:
PHP Warning: Module 'xxxx' already loaded in Unknown on line 0 ps:(xxxx 代表一些模块名如curl,redis)
原因
有两种方法来加载在PHP中大多数扩展。一种是直接编译扩展到PHP二进制文件。另一种是通过一个ini文件动态加载的共享扩展。这些错误表明,动态扩展正在通过.ini文件加载,即使它们已经被编译到PHP二进制文件。
解决方法:
要解决此问题,您必须编辑你的php.ini(或extensions.ini文件)文件和注释掉那些已经编译的扩展。例如,修改完成后,因为编译安装的模块不需要引入
例:extension=redis.so 改为 ;extension=redis.so
执行 php -v 可以看到提示没有了
设置定时任务 :
命令:crontab -e
添加定时任务,这里添加一条,如多条,每条任务换行,
前面的 “*/1 * * * * ” 分别代表 :分钟,时,日,月,星期。
- * 代表任意时刻,
- */1 代表没分钟执行一次,
- /usr/local/php/bin/php 执行的程序php (注意,这里不能用环境变量,必须绝对路劲,否则失败!)
- /www/123.php 要执行的代码或文件
:wq 保存就OK;
查看效果;
自动插入成功,
其他执行的方式 同理,