linux的cron不能linux 自动执行任务的原因是什么

linux实现php定时执行cron任务详解
字体:[ ] 类型:转载 时间:
linux实现php定时执行cron任务
对于PHP本身并没有一套解决方案来执行定时任务,不过是借助sleep函数完成的。这种方就是要提前做一些配置,如实现过程:
代码如下:ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.&&& set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去&&& $interval=60*30;// 每隔半小时运行&&& do{&&&&&&& //这里是你要执行的代码&& &&&&&&& sleep($interval);// 等待5分钟&&& }while(true);
不过关于这种方式我有一些担心性能方面的问题,不过也是个临时的方法。
本人推荐的方式采用脚本来实现,利用OS本身的定时任务机制,windows上场利用bat脚本。不过本人没有在window上尝试过。那我就讲讲在linux中的实现。
如果你的web server是基于linux的,那么可以采用linux下的cron job 来完成。以RedHat5 为例,我们只需要预先要定时执行的逻辑代码。例如demo.php
代码如下:&?phpecho "Hello";?&
然后是吧php用shell脚本一封装,在shell脚本中调用demo.php,demo.sh代码如下:
代码如下:#!/bin/bash#if you php install to /usr/local/php//usr/local/php/bin/php /home/xx-user/demo.php
完成shell脚本的编写之后,确保它有足够的这行权限,例如:/bin/chmod u+x demo.sh.
然后配置linux上的cronjob,cronjob是linux上默认安装的。如果你的任务是需要按小时、天、周、月来执行的话,那么你直接可以将你的demo.sh脚本拷贝到
/etc/cron.hourly 、/etc/cron.daily 、/etc/cron.weekly、/etc/cron.monthly 就ok了,这样就可以完成你的任务了 。如果到某个时间点想移除定时任务,那就从上面这些folder中move到其它地方或者直接删除掉就ok了。
如果你的脚本有特殊的执行时间,例如每个星期的周二,或者是每个月的15号执行。那么你就需要配置属于你自己的cron job.
关于cron的特殊的配置请参考:http://www.pantz.org/software/cron/croninfo.html
这里我就按照每天的上午12点到下午的14点钟之间每2分钟运行一次这个脚本,那么配置如下(例如demo.sh是位于/tmp 目录下):
首先在linux的命令行中执行crontab -e ,然后把规则输入到里面:
代码如下:*/2 12-14 * * *& /tmp/demo.sh
带输入完成之后按键盘上的“Esc”键,然后输入:wq,编辑页面就退出了。然后你可以用crontab -l 来查看你刚编辑的cron job.
到此时特殊的cron 也就完成了。例如你刚才是用linux下的demo账户来完成上面的步骤,那么还有一个简单的方法就是直接可以编辑/var/spool/cron/demo 这个文件,可以直接
修改你的cron job.& 例如 :vi /var/spool/cron/demo
利用OS的方式来管理你的定时任务是很快捷的,而且不用你担心性能的问题,除非你的脚本本身存在一些问题。这样的方式易于维护,可以修改定时执行的计划,也可以轻松的移除和新增其它的定时任务。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&正文
linux下env环境变量引起的crontab不生效解决办法
&crontab是linux中一个定时任务功能了,但是小编使用env环境变量之后迫害前的任务计划没效了,下面我们来看看如何解决env环境变量引起的crontab不生效问题.
有朋友说,他写了一个脚本来做计划任务定时备份数据库,但却一直都备份不成功,手动执行脚本也没有问题,而且在/var/log/cron日志里看到成功执行了,但就是没看到备份的数据库文件。
拿了ssh权限,登录之后,看了之后,和他所说的情况一样,脚本执行成功,但没有生成备份。
不过,查了一下发给root的邮件,看到了问题:
Return-Path: &&
X-Original-To: root
Delivered-To:
(Cron Daemon)
Subject: Cron &root@test& sh /data/cron/backup.sh
Content-Type: text/ charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: &LANG=en_US.UTF-8&
X-Cron-Env: &SHELL=/bin/sh&
X-Cron-Env: &HOME=/root&
X-Cron-Env: &PATH=/usr/bin:/bin&
X-Cron-Env: &LOGNAME=root&
X-Cron-Env: &USER=root&
Date: Tue,& 1 Apr :01 -0400 (EDT)
/data/cron/backup.sh: line 27: mysql: command not found
从上面可以看到,说mysql命令没有找到,于是执行了一下命令:
[root@test data]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin
这样就知道了问题所在,在crontab里的执行环境变量与root用户设置的环境变量不一致,从上面两个可以看出区别:
crontab里的环境变量:X-Cron-Env: &PATH=/usr/bin:/bin&
root用户的环境变量:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin
现在我们已经知道了,mysql这个命令是放在/usr/local/mysql/bin下面,而crontab的PATH变量中却没有这一条,所以出现mysql: command not found的问题。
同时,我们可以新建一个脚本,在crontab里验证一下PATH变量:
[root@test data]# vi path.sh
#!/bin/bash
echo $PATH
# 保存后,加入到crontab
[root@test data]# crontab -e
&*/1 * * * * /data/path.sh
1分钟后,可以看到:
/usr/bin:/bin
知道了问题,那就好解决了,有两种:
1. 在备份脚本里,手动设置一下,例如:
#!/bin/bash
. /etc/profile
....余下内容...
这里需要&. /etc/profile&,是因为朋友的mysql是自己编译的,把mysql的路径都添加到这里:
PATH=$PATH:$HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin
export PATH
2. 直接设置用户的crontab,添加路径/usr/local/mysql/bin,例如:
[root@test data]# crontab -e
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/root/bin
MAILTO=root
0 */12 * * * sh /data/cron/backup.sh
保存之后,就可以正常备份了。
另外可以了解一个文件/etc/crontab:
[root@test data]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |& .------------- hour (0 - 23)
# |& |& .---------- day of month (1 - 31)
# |& |& |& .------- month (1 - 12) OR jan,feb,mar,apr ...
# |& |& |& |& .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |& |& |& |& |
# *& *& *& *& * user-name command to be executed
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:Linux的自动执行程序cron和crontab_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Linux的自动执行程序cron和crontab
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢linux使用cron定时启动可执行jar包无法运行的解决方案
核心提示:发布于 09:26:310 23 * * * . /root/DataUpdate/auto.sh1&/root/DataUpdate/info.log 2&/root/DataUpdate/warn.log在定时任务后添加.可能是目录问题引起的无法正确查找到相关jar包0 23 * * * . /root/DataUpdate/auto.sh1&/root/DataUpdate/info.log 2&/root/DataUpdate/warn.log在定时任务后添加.可能是目录问题引起的无法正确查找到相关jar包

我要回帖

更多关于 linux 自动执行 的文章

 

随机推荐