如何使用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
访问完整文章的链接,它解释说:
- 如果你想手动input/编辑,cronjob的格式是什么。
- 如何使用PHP和SSH2库来authentication用户,你要编辑哪个crontab。
- 完整的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); }