Ubuntu下关于crontab的使⽤详解
如果碰到了需要在指定的时间运⾏php脚本的情况,⽐如定时进⾏⽹站的数据统计、⾃动执⾏数据库备份任务、定时发送email等等。
如果我们不使⽤Cron来执⾏php脚本,或许我们会采⽤php include的⽅法。
⽐如在index.php 中添加代码:<?php include "crontab.php"?>
当然这只是⼀种思路,这种⽅法并不能指定时间定时运⾏脚本,同时也给index.php带来了额外的服务器消耗。⽽Linux Ubuntu Crontab 可以很好地完成php 定时任务
CGI 模块
如果Server API是cgi,那么在需要cron执⾏的php脚本的第⼀⾏额外加⼊⼀段代码
#!/usr/bin/php -q(类似PERL语法),指定服务器中php可执⾏程序的位置
具体步骤如下:
确认Ubuntu已经安装了php5-cli模块安装命令:apt-get install php5-cli。在⽬录 /usr/bin/php下⽣成 php
可执⾏程序。
2. 编辑待定时执⾏的php脚本⽂件crontab.php,如:
1234#!/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退出。
Apache 模块
如果php安装是以 apache 模式运⾏的,那么在要在ubuntu服务器定时执⾏的php脚本开头就不⽤加#!/usr/bin/php -q 这⼀⾏。php脚本在ubuntu 通过crontab的定时执⾏通过Lynx浏览器的⾃动访问来完成。
1. Lynx浏览器安装。
Lynx浏览器是⼀款轻便的web浏览器,使⽤于⼤部分Unix 和系统环境。
安装命令:sudo apt-get install lynx
2. 编辑cron任务,命令crontab -e
通过CURL来完成远程调⽤
1、创建计划任务,使⽤crontab命令:
crontab -e
执⾏这条命令,选择计划任务编辑器,⼀般选择nano(⽐较简单)
2、输⼊要执⾏的PHP代码或者其他URL的⽹页:
上⾯这条命令的意思是每隔三分钟执⾏⼀次monitor.php这个代码⽂件,从坐到右依次是分、时、天、⽉、年,也可以指定在某段时间内执⾏:
即在早上9点到晚上6点,每隔三分钟执⾏依次monitor.php代码。
3、输⼊以上命令后按Ctrl+X,并选择Yes,保存计划任务,这样就成功创建了⼀个crontab,要查看当前⽤户的计划任务列表,输⼊⼀下命令:
crontab -l
crontab知识普及
代码如下:
# crontab -e
00 * * * * /usr/local/bin/php /home/john/myscript.php
/usr/local/bin/php为PHP程序的路径。
⼆、在Crontab中使⽤URL执⾏脚本
如果你的PHP脚本可以通过URL触发,你可以使⽤lynx或curl或wget来配置你的Crontab。
下⾯的例⼦是使⽤Lynx⽂本浏览器访问URL来每⼩时执⾏PHP脚本。Lynx⽂本浏览器默认使⽤对话⽅式打开URL。但是,像下⾯的,我们在lynx命令⾏中使⽤-dump选项来把URL的输出转换来标准输出。
代码如下:
下⾯的例⼦是使⽤CURL访问URL来每5分执⾏PHP脚本。Curl默认在标准输出显⽰输出。使⽤”curl -o”选项,你也可以把脚本的输出转储到临时⽂件。
代码如下:
下⾯的例⼦是使⽤WGET访问URL来每10分执⾏PHP脚本。-q选项表⽰安静模式。”-”表⽰输出会发送到临时⽂件。
代码如下:
下⾯对他做⼀个详细的介绍:
下⾯对他做⼀个详细的介绍:
名称 : crontab
使⽤权限 : 所有使⽤者
使⽤⽅式 :
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
说明 :
crontab 是⽤来让使⽤者在固定时间或固定间隔执⾏程序之⽤,换句话说,也就是类似使⽤者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(⽐如说是 root)才能够指定他⼈的时程表。如果不使⽤ -u user 的话,就是表⽰设定⾃⼰的时程表。 参数 :
crontab -e : 执⾏⽂字编辑器来设定时程表,内定的⽂字编辑器是 VI,如果你想⽤别的⽂字编辑器,则请先设定 VISUAL 环境变数来指定使⽤那个⽂字编辑器(⽐如说 setenv VISUAL joe)
crontab -r : 删除⽬前的时程表
crontab -l : 列出⽬前的时程表
crontab file [-u user]-⽤指定的⽂件替代⽬前的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...个⼩时要执⾏,其馀类推
使⽤者也可以将所有的设定先存放在档案 file 中,⽤ crontab file 的⽅式来设定时程表。
例⼦ :
#每天早上7点执⾏⼀次 /bin/ls :
0 7 * * * /bin/ls
在 12 ⽉内, 每天的早上 6 点到 12 点中,每隔3个⼩时执⾏⼀次 /usr/bin/backup :
0 6-12/3 * 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"
curl是什么命令20 0-23/2 * * * echo "haha"
注意 :
当程序在你所指定的时间执⾏后,系统会寄⼀封信给你,显⽰该程序执⾏的内容,若是你不希望收到这样的信,请在每⼀⾏空⼀格之后加上> /dev/null 2>&1 即可
例⼦2 :
#每天早上6点10分
10 6 * * * date
#每两个⼩时
0 */2 * * * date
#晚上11点到早上8点之间每两个⼩时,早上8点
0 23-7/2,8 * * * date
#每个⽉的4号和每个礼拜的礼拜⼀到礼拜三的早上11点
0 11 4 * mon-wed date
#1⽉份⽇早上4点
0 4 1 jan * date
范例
$crontab -l 列出⽤户⽬前的crontab.
crontab命令的功能是在⼀定的时间间隔调度⼀些命令的执⾏。在/etc⽬录下有⼀个crontab⽂件,这⾥存放有系统运⾏的⼀些调度程序。每个⽤户可以建⽴⾃⼰的调度crontab。
crontab命令有三种形式的命令⾏结构:
crontab [-u user] [file]
crontab [-u user] [-e|-l|-r]
crontab -l -u [-e|-l|-r] 第⼀个命令⾏中,file是命令⽂件的名字。如果在命令⾏中指定了这个⽂件,那么执⾏crontab命令,则将这个⽂件拷贝到crontabs⽬录下;如果在命令⾏中没有制定这个⽂件,crontab命令将接受标准输⼊(键盘)上键⼊的命令,并将他们也存放在
拷贝到crontabs⽬录下;如果在命令⾏中没有制定这个⽂件,crontab命令将接受标准输⼊(键盘)上键⼊的命令,并将他们也存放在crontab⽬录下。
命令⾏中-r选项的作⽤是从/usr/spool/cron/crontabs⽬录下删除⽤户定义的⽂件crontab;
命令⾏中-l选项的作⽤是显⽰⽤户crontab⽂件的内容。
使⽤命令crontab -u user -e命令编辑⽤户user的cron(c)作业。⽤户通过编辑⽂件来增加或修改任何作业请求。
执⾏命令crontab -u user -r即可删除当前⽤户的所有的cron作业。
作业与它们预定的时间储存在⽂件/usr/spool/cron/crontabs/username⾥。username使⽤户名,在相应的⽂件中存放着该⽤户所要运⾏的命令。命令执⾏的结果,⽆论是标准输出还是错误输出,都将以
邮件形式发给⽤户。⽂件⾥的每⼀个请求必须包含以spaces和tabs分割的六个域。前五个字段可以取整数值,指定何时开始⼯作,第六个域是字符串,称为命令字段,其中包括了crontab调度执⾏的命令。 第⼀道第五个字段的整数取值范围及意义是:
0~59 表⽰分
1~23 表⽰⼩时
1~31 表⽰⽇
1~12 表⽰⽉份
0~6 表⽰星期(其中0表⽰星期⽇)
/usr/lib/cron/cron.allow表⽰谁能使⽤crontab命令。如果它是⼀个空⽂件表明没有⼀个⽤户能安排作业。如果这个⽂件不存在,⽽有另外⼀个⽂件/usr/lib/cron/cron.deny,则只有不包括在这个⽂件中的⽤户才可以使⽤crontab命令。如果它是⼀个空⽂件表明任何⽤户都可安排作业。两个⽂件同时存在时cron.allow优先,如果都不存在,只有超级⽤户可以安排作业。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论