如何使用PHP创buildcron作业?

我是使用cron作业的新手。 我甚至不知道如何写它。 我试图从网上search,但我还是不太明白。 我想创build一个cron作业,每分钟执行一次我的代码。 我使用PHP来创build它。 它不工作。

run.php (每分钟执行一次的代码)

<?php echo "This code will run every minute"; ?> 

cron.php

 <?php $path = dirname(__FILE__); $cron = $path . "/run.php"; echo exec("***** php -q ".$cron." &> /dev/null"); ?> 

假设这两个文件在同一个文件夹中。

是我做错了的代码? 如果错了,请告诉我如何解决。

这是迄今为止发现的PHP代码中的最佳解释:

http://code.tutsplus.com/tutorials/managing-cron-jobs-with-php–net-19428

简而言之:

虽然安排新工作的语法乍一看似乎令人望而生畏,但一旦你把它分解出来,其实相对来说很容易理解。 一个cron作业将总是有五个列,每个列表示一个按时间顺序排列的“操作符”,后面跟着完整的path和命令来执行:

* * * * * home / path / to / command / the_command.sh

每个按时间顺序排列的列都与任务的时间表有特定的相关性。 他们如下:

 Minutes represents the minutes of a given hour, 0-59 respectively. Hours represents the hours of a given day, 0-23 respectively. Days represents the days of a given month, 1-31 respectively. Months represents the months of a given year, 1-12 respectively. Day of the Week represents the day of the week, Sunday through Saturday, numerically, as 0-6 respectively. 

在这里输入图像描述

所以,例如,如果有人想在每个月的第一天安排一个12点的任务,那看起来是这样的:

0 0 1 * * home / path / to / command / the_command.sh

如果我们想要安排一个任务,每个星期六上午八点半开始运行,我们会这样写:

30 8 * * 6 home / path / to / command / the_command.sh

还有一些运营商可以用来进一步定制时间表:

 Commas is used to create a comma separated list of values for any of the cron columns. Dashes is used to specify a range of values. Asterisksis used to specify 'all' or 'every' value 

访问完整文章的链接,它解释说:

  1. 如果你想手动input/编辑,cronjob的格式是什么。
  2. 如何使用PHP和SSH2库来authentication用户,你要编辑哪个crontab。
  3. 完整的PHP类,包含authentication,编辑和删除crontab条目的所有必要方法。

以同样的方式尝试运行cron.php,你可以运行另一个PHP脚本。 不过,你必须通过CLI界面来完成。

 #!/usr/bin/env php <?php # This file would be say, '/usr/local/bin/run.php' // code echo "this was run from CRON" 

然后,添加一个条目到crontab中:

 * * * * * /usr/bin/php -f /usr/local/bin/run.php &> /dev/null 

如果run.php脚本具有可执行权限,则可以直接在crontab中列出,而不需要/ usr / bin / php部分。 脚本中的“env php”部分将find适当的程序来实际运行PHP代码。 因此,对于“可执行”版本,请向文件添加可执行权限:

 chmod +x /usr/local/bin/run.php 

然后将以下条目添加到crontab中:

 * * * * * /usr/local/bin/run.php &> /dev/null 

添加到Alister,你可以通过在服务器上的ssh会话中inputcrontab -e通常(并非总是如此)来编辑crontab。

星星代表(*表示每个单位):

 [Minute] [Hour] [Day] [Month] [Day of week (0 =sunday to 6 =saturday)] [Command] 

你可以在这里阅读更多。

有一个简单的方法可以解决这个问题:你可以每隔1分钟用cron执行一个php文件,php内部的可执行文件在这个时候“now”执行“if”语句来执行

 <?/** suppose we have 1 hour and 1 minute inteval 01:01 */ $interval_source = "01:01"; $time_now = strtotime( "now" ) / 60; $interval = substr($interval_source,0,2) * 60 + substr($interval_source,3,2); if( $time_now % $interval == 0){ /** do cronjob */ } 

在linux / ubuntuterminal中键入以下内容

  crontab -e 

select一个编辑器(有时它会要求编辑器)并且每分钟运行一次

 * * * * * /usr/bin/php path/to/cron.php &> /dev/null 

创build一个这样的cronjob每分钟工作

 * * * * * /usr/bin/php path/to/cron.php &> /dev/null 
 function _cron_exe($schedules) { if ($obj->get_option('cronenabledisable') == "yes") { // $interval = 1*20; $interval = $obj->get_option('cronhowtime'); if ($obj->get_option('crontiming') == 'minutes') { $interval = $interval * 60; } else if ($obj->get_option('crontiming') == 'hours') { $interval = $interval * 3600; } else if ($obj->get_option('crontiming') == 'days') { $interval = $interval * 86400; } $schedules['hourlys'] = array( 'interval' => $interval, 'display' => 'cronjob' ); return $schedules; } } 

为什么你不使用curl? 从逻辑上讲,如果你执行php文件,你会在浏览器上通过url执行。 它很简单,如果你运行curl

 while(true) { sleep(60); // sleep for 60 sec = 1 minute $s = curl_init(); curl_setopt($s,CURLOPT_URL, $your_php_url_to_cron); curl_exec($s); curl_getinfo($s,CURLINFO_HTTP_CODE); curl_close($s); }