ubuntu设置脚本执行php,Ubuntu: 利用Crontab定时执行PHP文件, 定时执行php脚本文件

什么是Cron和Crontab

Unix和Linux系统的各个发行版本基本都支持Cron,Cron /Crontab允许我们在设定的时间自动执行或定时执行某个任务,如应用程序或脚本。更详细的概念和使用方法介绍请点击Cron和Crontab是什么?

现在我们要讨论的是,许多的php程序员都可以很快完成Web应用的开发,PHP代码的调试也比PERL或C语言容易很多,不过经常会碰到有php程序员会问:如何在linux系统中使用crontab来运行Php脚本?比如ubuntu crontab 定时执行php代码。

Ubuntu 如何使用Crontab定时自动执行PHP脚本

在指定的时间运行php脚本的情况,比如定时进行网站的数据统计、自动执行数据库备份任务、定时发送email等等。

如果我们不使用Cron来执行php脚本,或许我们会采用php include的方法。比如在index.php 中添加代码:<?php include "crontab.php"?>。当访客通过浏览器访问http://h.farll.com/index.php的时候,自动执行了crontab.php。当然这只是一种思路,这种方法并不能指定时间定时运行PHP脚本,同时也给index.php带来了额外的服务器消耗。而Linux Ubuntu Crontab 可以很好地完成php 定时任务,这也是写这篇关于cron的文章的目的。

然后首先想到的是和windows 系统下的计划任务一样,通过在windows中使用php的命令行模式执行计划任务实现定时自动执行php脚本,这是一个思路,另外一个思路就是直接在浏览器中访问php脚本的地址,定时自动打开浏览器访问该网址,执行php脚本。因此在Ubuntu服务器系统下,同样有类似的两种思路。下面http://h.farll.com/逐步介绍使用Ubuntu Crontab定时执行PHP脚本的设置方法。

我在开发中,常用的定时任务有2种。一种是直接调用PHP文件执行(CGI 编译),还有一种是调用远程URL地址(Apache 模块)。

首先,先来亮相一下我们今天的主角,Crontab命令。这个是系统定时命令,作用是定时的去执行一些任务。包含一些系统级别的任务,当然用户也可以直接借用该命令来实现自己的一些计划任务。

该命令一般跟随系统启动,我们可以使用一下命令来查看是否cron是否启动

pgrep cron

如果启动了,会返回一个进程id

073aa8aba3a8f7bb77f2e0638d6f8922.pngUbuntu: 利用Crontab定时执行PHP文件, 定时执行php脚本文件

Crontab文件一般存放于/etc目录下。我们使用,crontab -e来编辑cron任务。(第一次用这个命令,会让你选择文本编辑器)

6a28537fee75469bae6b30e0c1eea05d.pngUbuntu: 利用Crontab定时执行PHP文件, 定时执行php脚本文件

打开cron文件,注意观察最后一行 m h dom…这里简要介绍一下它的意思。

m:分钟,0-59

h:小时,0-23

dom:日期,1-31

mon:月份,1-12

dow:星期,0-6,0为星期天

command:命令

这里,我们应该已经知道其大概的用法了。我们只要在对应的位置填写上我们需要的数字日期,就可以使用它来表示:在某月(mon)的某天(dom)或者星期几(dow)的几点(h,24小时制)几分(m)执行某个命令(command)。

举个栗子:

* * * * * php /path/to/your/cron.php

#5个星号分别代表定时指定每分、小时、日、月、周。

* 19 * * * php /var/www/cron/crontab.php

#讲第二个参数h填写为19,则表示每天的下午7点执行crontab.php。

* * * * * php /path/to/your/cron.php

#每隔一分钟执行一次任务

0 * * * * php /path/to/your/cron.php

#每小时的0点执行一次任务,比如6:00,10:00

6,10 * 2 * * php /path/to/your/cron.php

#每个月2号,每小时的6分和10分执行一次任务

*/3,*/5 * * * * php /path/to/your/cron.php

#每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06

在这个例子中,我们看到不仅有数字还有星号和/等等符号。这些符号可以让定时更加的灵活。

*(星号):表示任意值,在相应位置填写*,可以代表任意执行。比如h为*,则为任意的小时

,(逗号):表示一个部分填写多个值,比如在m位置填写1,5代表1分钟或5分钟时候

/(斜杠):表示每隔多久,比如在h部分填写*/2表示每隔2个小时,*/3表示每隔3个小时,

*/1和*无区别,所以可以省略。这里可以想想,*/2表示能被2整除的时间就好理解了。

使用你的编辑器,保存->退出之后。重新启动cron任务。在每天的相应时间即可看到效果。

下面我们就先来说说PHP开发中,我常用的两种。

第一种:直接调用PHP文件 –CGI 编译

如果Server API是cgi,那么在需要cron执行的php脚本的第一行额外加入一段代码#!/usr/bin/php -q(类似PERL语法),指定服务器中php可执行程序的位置,具体步骤如下:

1. 确认Ubuntu系统已经安装了php7.0-cli模块,安装命令:

sudo apt-get install php7.0-cli

在目录 /usr/bin/php下生成 php可执行程序。

2.  编辑待定时执行的php脚本文件crontab.php,如:

#!/usr/bin/php -q

date_default_timezone_set('America/Los_Angeles');

$file = "/var/www/html/".date('H').'_'.date('i').'_'.date('s').'.txt';

$f = fopen($file, 'w+');

fwrite($f, 'Run Crontab : '.date('m/d/Y h:i:s a', time()));

fclose($f);

这里要注意变量$file要采用绝对路劲

注意:这种直接调用PHP文件需要在PHP文件最上方加入#!/usr/bin/php -q代码,而第二种方式(接下来会讲),是直接访问链接,通过Apache来解析PHP,这种PHP脚本则不需要加这段代码。

3.  编辑 crontab 任务:

打开终端,输入命令:crontab -e,

Select an editor. To change later, run 'select-editor'.

1. /bin/ed

2. /bin/nano

3. /usr/bin/vim.tiny

选择一个Ubuntu编辑器后,编辑/tmp/crontab.AuN7IQ/crontab 文件:

在下面添加定时执行命令:

* * * * * php /path/to/your/cron.php

5个星号分别代表定时指定每分、小时、日、月、周。如每天的下午7点执行crontab.php,命令为:

* 19 * * * php /var/www/cron/crontab.php

然后按Ctrl+O保存,Ctrl+X退出, 如果你使用vi编辑器,那么直接使用 :wq 保存并退出。

4. 执行以下Crontab命令行

Shell> crontab crontab

确认crontab.php的权限为可执行("chmod 755 /var/www/cron/crontab.php")。

第二种:通过访问URL链接定时 – Apache 模块

如果php安装是以 apache 模式运行的,那么在要在ubuntu服务器定时执行的php脚本开头就不用加#!/usr/bin/php  -q 这一行。php脚本在ubuntu 通过crontab的定时执行通过Lynx浏览器的自动访问来完成。

1.  使用于大部分Unix 和Linux系统环境。安装命令:

sudo apt-get install lynx

2. 编辑cron任务,命令crontab -e

* * * * * lynx -dump http://justcode.ikeepstudying.com/cron.php

注意这个地址最好用绝对地址,包含“http://”的完整url。

3. 再次执行下面的命令行:

Shell> crontab crontab

因为我在ubuntu安装的是lamp server,所以采用第二种Apache 模块的方法就可以使用crontab定时执行php脚本代码。

如果只是运行一次,不需要返回,比如打开网页即同步数据,那么还有更简单的方法,就是:

curl --connect-timeout 1800 --max-time 2000 -s http://justcode.ikeepstudying/cron/sync.php

系统级任务调度与用户级任务调度

系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行,root用户的任务调度操作可以通过”crontab –uroot –e”来设置,也可以将调度任务直接写入/etc/crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。

其他注意事项

新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。

当crontab失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。

在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’。

更新系统时间时区后需要重启cron,在ubuntu中服务名为cron:

$service cron restart

ubuntu下启动、停止与重启cron:

$sudo /etc/init.d/cron start

$sudo /etc/init.d/cron stop

$sudo /etc/init.d/cron restart

cbd5a61765aed016a56103b68dcc8d51.gif

相关

Related Posts

calendar-indicator-0.2.0-150x150.png

Ubuntu: 谷歌日历指示器托盘软件

安装 sudo add-apt-repository ppa:atareao/atareao sudo apt-get update sudo apt-get…

Ubuntu: 开启apache地址重写, rewrite, Enabling .htaccess file to rewrite path, .htaccess - URL rewriting not working, Rewrite rules not working

sudo vi /etc/apache2/apache2.conf  (没有的话,可以尝试sudo vi /etc/apache2/sites-available/000-default.conf)打开apache配置文件   #实际目录根据网站根目录而定   …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值