crontab定时执行任务
第一部分 crontab介绍
每个操作系统都有它的自动定时启动程序的功能,Windows有它的任务计划,而Linux对应的功能是crontab。
crontab简介
crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρόνος),原意是时间。 通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
crontab用法
crontab的格式如下面:
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行程式的路径。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
- 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推
管理员登录SSH,输入命令crontab -e编辑crontab文件,根据上面的格式输入并保存。
crontab例子
每月每天每小时的第 0 分钟执行一次 /bin/ls :
- 0 * * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :
- */20 6-12 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 alex@domain.name :
- 0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
- 20 0-23/2 * * * echo "haha"
晚上11点到早上8点之间每两个小时,早上8点
- 0 23-7/2,8 * * * date
在hp unix,中,每20分钟执行一次,表示为:0,20,40 * * * * 而不能采用*/n方式,否则出现语法错误
crontab用法其实很容易掌握,懂得使用crontab,对网站和服务器维护起到很大的帮助,比如定时备份,定时优化服务器等。
第二部分Ubuntu 如何使用Crontab定时自动执行PHP脚本
现在远方博客也碰到了需要在指定的时间运行php脚本的情况,比如定时进行网站的数据统计、自动执行数据库备份任务、定时发送email等等。
如果我们不使用Cron来执行php脚本,或许我们会采用php include的方法。比如在index.php 中添加代码:<?php include "crontab.php"?>。当访客通过浏览器访问http://farlee.info/index.php的时候,自动执行了crontab.php。当然这只是一种思路,这种方法并不能指定时间定时运行PHP脚本,同时也给index.php带来了额外的服务器消耗。而Linux Ubuntu Crontab 可以很好地完成php 定时任务,这也是写这篇关于cron的文章的目的。
然后首先想到的是和windows 系统下的计划任务一样,通过在windows中使用php的命令行模式执行计划任务实现定时自动执行php脚本,这是一个思路,另外一个思路就是直接在浏览器中访问php脚本的地址,定时自动打开浏览器访问该网址,执行php脚本。因此在Ubuntu服务器系统下,同样有类似的两种思路。下面http://farlee.info/逐步介绍使用Ubuntu Crontab定时执行PHP脚本的设置方法。
PHP 安装模式
首先我们必须先确认自己在LINUX Ubuntu 服务器上php的安装模式,以CGI 模块还是Apache模块方式安装? 如果不确定php安装模式,可以使用 phpinfo() 函数查看:将<?php phpinfo(); ?> 写在php文件中上传到网站服务器,访问该页面,就在页面顶部我们找到“Server API”,如果类似“Apache 2.0 Handler”,那么就是apache模块;否则php是CGI 模式(shell 命令行模式)。这两种不同的php安装模式,正对应于前面介绍的ubuntu crontab 定时执行php的两种解决方法。
CGI 编译
如果Server API是cgi,那么在需要cron执行的php脚本的第一行额外加入一段代码#!/usr/bin/php -q(类似PERL语法),指定服务器中php可执行程序的位置,具体步骤如下:
1. 确认Ubuntu系统已经安装了php5-cli模块,安装命令:apt-get install php5-cli。在目录 /usr/bin/php下生成 php可执行程序。
2. 编辑待定时执行的php脚本文件crontab.php,如:
#!/usr/bin/php -q
<?php
$file = “/var/www/”.date(‘H’).’_’.date(‘i’).’_’.date(‘s’).’.txt’;
file_put_contents($file,date(‘Y-m-d’));
?>
3. 编辑 crontab 任务:
打开终端,输入命令:crontab -e,
Select an editor. To change later, run ‘select-editor’.
1. /bin/ed
2. /bin/nano <—- easiest
3. /usr/bin/vim.tiny
选择一个Ubuntu编辑器后,编辑/tmp/crontab.AuN7IQ/crontab 文件:
# m h dom mon dow command
在下面添加定时执行命令:
* * * * * php /path/to/your/cron.php
5个星号分别代表定时指定每分、小时、日、月、周。如每天的下午7点执行crontab.php,命令为:
* 19 * * * php /var/www/cron/crontab.php
然后按Ctrl+O保存,Ctrl+X退出。
4. 执行以下Crontab命令行
Shell> crontab crontab
确认crontab.php的权限为可执行("chmod 755 /var/www/cron/crontab.php")。
Apache 模块
如果php安装是以 apache 模式运行的,那么在要在ubuntu服务器定时执行的php脚本开头就不用加 #!/usr/bin/php -q 这一行。php脚本在ubuntu 通过crontab的定时执行通过Lynx浏览器的自动访问来完成。
1. Lynx浏览器安装。
Lynx浏览器是一款轻便的web浏览器,使用于大部分Unix 和Linux系统环境。安装命令:sudo apt-get install lynx。
2. 编辑cron任务,命令crontab -e
* * * * * lynx -dump http://farlee.info/cron.php
注意这个地址最好用绝对地址,包含“http://”的完整url。
3. 再次执行下面的命令行:
Shell> crontab crontab
第三部分如果你的PHP脚本可以通过URL触发,你可以使用lynx或curl或wget来配置你的Crontab。
下面的例子是使用Lynx文本浏览器访问URL来每小时执行PHP脚本。Lynx文本浏览器默认使用对话方式打开URL。但是,像下面的,我们在lynx命令行中使用-dump选项来把URL的输出转换来标准输出。
1 |
00 * * * * lynx -dump http: //www .centos.bz /myscript .php |
下面的例子是使用CURL访问URL来每5分执行PHP脚本。Curl默认在标准输出显示输出。使用”curl -o”选项,你也可以把脚本的输出转储到临时文件。
1 |
* /5 * * * * /usr/bin/curl -o temp.txt http: //www .centos.bz /myscript .php |
下面的例子是使用WGET访问URL来每10分执行PHP脚本。-q选项表示安静模式。”-O temp.txt”表示输出会发送到临时文件。
1 |
* /10 * * * * /usr/bin/wget -q -O temp.txt http: //www .centos.bz /myscript .php
|
crontab定时执行任务的更多相关文章
- linux crontab定时执行
#利用crontab定时执行url研究了两种简单方式#一利用lynx访问url yum install lynxservice crond startcrontab -einsert键* * * * ...
- linux下使用crontab定时执行脚本
使用crontab定时执行脚本 cron服务是一个定时执行的服务,可以通过crontab 命令添加或者编辑需要定时执行的任务: crontab –e : 修改 crontab 文件,如果文件不存在会自 ...
- crontab定时执行shell脚本失败的原因
有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...
- Crontab定时执行Oracle存储过程
Crontab定时执行Oracle存储过程 需求描述 我们有一个Oracle的存储过程,里面是每个月需要执行一下,生成报表,然后发送给业务部门,这一个功能我们有实现在系统的前台界面(如图1-1),但是 ...
- 小记---------手动执行脚本正常执行,使用crontab定时执行时 不执行
可能出现的原因就是因为crontab不会从用户的/etc/profile文件中读取环境变量,所以就出现 使用定时crontab执行时 无法执行 抛错 所以在使用crontab 定时执行脚本时 在脚本 ...
- Linux命令之Crontab定时任务,利用Crontab定时执行spark任务
Linux命令之Crontab定时任务,利用Crontab定时执行spark任务 一.Linux命令之Crontab定时任务 1.1 常见Crontab任务 1.1.1 安装crontab 1.1.2 ...
- 如何使用Linux的Crontab定时执行PHP脚本的方法
我们的PHP程序有时候需要定时执行,我们可以使用ignore_user_abort函数或是在页面放置js让用户帮我们实现.但这两种方法都不太可靠,不稳定.我们可以借助Linux的Crontab工具来稳 ...
- Linux下的crontab定时执行任务命令详解
在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为“cr ...
- linux crontab定时执行shell脚本
linux下使用crontab命令被用来提交和管理用户的需要周期性执行的任务,示例如下:crontab -e 编辑周期任务30 21 * * * /etc/init.d/smb restart 每晚的 ...
随机推荐
- Asp.Net中的session配置
一.InProc模式(缺省模式) <sessionState mode="InProc" timeout="20"></sessionStat ...
- Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)
linux作为服务器系统,当运行高并发TCP程序时,通常会出现连接建立到一定个数后不能再建立连接的情况 本人在工作时,测试高并发tcp程序(GPS服务器端程序),多次测试,发现每次连接建立到3800左 ...
- Linux sed命令在指定行前后添加内容
一.在匹配行前后加内容在包含www.baidu.com的行前面或后面添加多一行内容www.qq.com#匹配行前加sed -i '/www.baidu.com/i www.qq.com' domain ...
- PHP表单提交验证各种方式
<!DOCTYPE unspecified PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www. ...
- ubuntu 更新 php5.5.9 到 php 5.6
add-apt-repository ppa:ondrej/php5-5.6 apt-get update apt-get install php5 为了使用 add-apt-repsitory 需要 ...
- Win7下安装Ubuntu双系统常见问题
[转自己以前的文章] 导航: ● win7下硬盘安装ubuntu常见问题 ● win7下u盘安装ubuntu常见问题 吐槽: Ubuntu的安装花了我将近15个小时,网上常见的.不常见的问题基本我都 ...
- QComboBox实现复选功能
需求: 下拉列表有复选功能 不可编辑 显示所有选中项 关于QComboBox的复选功能有几种方案: QStandardItemModel + QStandardItem QListWidget + ...
- 第三方分页控件aspnetPager出现问题解决方法
问题描述: 今天在打开以前的项目使用vs2013打开后并且生成解决方案的时候发现报错了.经过检查发现是由于第三方分页控件aspnetPager在页面上不能引用到了. 解决方法: 1. 首先将AspNe ...
- 堆排序(Heap Sort)的C语言实现
堆排序(Heap Sort)具体步骤为 将无序序列建成大顶堆(小顶堆):从最后一个非叶子节点开始通过堆调整HeapAdjust()变成小顶堆或大顶堆 将顶部元素与堆尾数组交换,此是末尾元素就是最大值, ...
- SqlServer 还原,备份 Sql脚本命令
备份 USE master go ),); set @path='d:\backup\'; set @name=@path+'TsDb.bak'; Backup database TsDb To di ...