如何使用PHP创建cron作业?
我不熟悉使用cron作业。我甚至不知道怎么写。我试着在网上搜索,但我还是不太懂。我想创建一个cron作业,它每分钟都会执行我的代码。我正在使用PHP创建它。它不起作用 示例 run.php(每分钟执行一次的代码)如何使用PHP创建cron作业?,php,cron,Php,Cron,我不熟悉使用cron作业。我甚至不知道怎么写。我试着在网上搜索,但我还是不太懂。我想创建一个cron作业,它每分钟都会执行我的代码。我正在使用PHP创建它。它不起作用 示例 run.php(每分钟执行一次的代码) cron.php <?php $path = dirname(__FILE__); $cron = $path . "/run.php"; echo exec("***** php -q ".$cron." &> /dev/null"); ?>
cron.php
<?php
$path = dirname(__FILE__);
$cron = $path . "/run.php";
echo exec("***** php -q ".$cron." &> /dev/null");
?>
假设这两个文件位于同一文件夹中
我做的代码是错的吗?如果有错误,请告诉我如何修复。创建一个这样的cronjob,让它每分钟都工作
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
与您尝试运行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";
如果run.php脚本具有可执行权限,那么它可以直接列在crontab中,而不需要/usr/bin/php部分。脚本中的“env-php”部分将找到实际运行php代码的适当程序。因此,对于“可执行”版本-向文件添加可执行权限:
chmod +x /usr/local/bin/run.php
然后,将以下条目添加到crontab中:
* * * * * /usr/local/bin/run.php &> /dev/null
添加到Alister中,您通常可以通过在服务器上的ssh会话中输入crontab-e来编辑crontab(不总是这样) 星号表示(*表示本单元的每个部分):
你可以多读一些 在linux/ubuntu终端中键入以下内容
crontab -e
选择一个编辑器(有时它会要求编辑器)
这是每分钟都在运行的
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
* * * * * /usr/bin/php path/to/cron.php &> /dev/null
这是迄今为止我发现的最好的PHP代码解释: 简言之: 虽然安排一个新作业的语法乍一看可能令人望而生畏,但一旦你把它分解了,其实理解起来就相对简单了。cron作业始终有五列,每列表示按时间顺序排列的“运算符”,后跟要执行的完整路径和命令: *****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 1**home/path/to/command/the_command.sh
如果我们想安排一个任务在每周六上午8:30运行,我们可以这样写:
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.
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分钟通过cron执行一次php文件,在php可执行文件中,当时间“现在”时,像这样执行“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 */
}
为什么不使用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);
}
$command=“php”.CRON\u PATH.php”;
if(substr(php_uname(),0,7)=“Windows”){
pclose(popen(“启动/B”。$command,“r”);
}否则{
shell_exec($command.>/dev/null&');
}
首先使用用户名和密码打开SSH服务器,并更改为默认根用户(具有所有权限的用户),然后按照以下步骤操作
crontab-l
,现在您将看到
所有的工作crontab-e
将创建一个包含所有cron作业的文件
打开min hr
dayofmonth month dayofweek pathtocronjobfile
并保存该文件crontab:installingnew
crontab
现在再次检查您的cron作业将显示的cron作业列表
列在那里如果您没有托管自己的内容,这可能取决于您的web主机。如果您的web主机支持创建计时作业,则他们可能会为您填写一张表格,让您选择频率并输入要执行的文件的绝对路径。例如,我的web主机(DreamHost)允许我通过键入文件的绝对路径并从“选择”菜单中选择频率来创建自定义cron作业。这对于您的服务器可能是不可能的,在这种情况下,您需要直接或通过特定于主机的方法编辑crontab 如上所述,创建一个使用CLI运行的PHP文件(确保在文件开头包含
#!/usr/bin/env PHP
,然后再更好地将项目与Linux cronjob结合使用以完成此任务。它允许您在PHP代码中配置运行时间,支持后台作业,并且易于使用
第一步每分钟调用一个PHP脚本:
* * * * * /usr/local/bin/run.php &> /dev/null
第二步,使用该包直接在PHP中配置运行时
$deprecatedStatus = new ShellJob();
$deprecatedStatus->setCommand('cd /app && /usr/local/bin/php cron/updateDeprecatedStatus.php');
$deprecatedStatus->setSchedule(new CrontabSchedule('* * * * */2'));
$displayDate = new ShellJob();
$displayDate->setCommand('cd /app && /usr/local/bin/php cron/updateDisplayDate.php');
$displayDate->setSchedule(new CrontabSchedule('* * * * */5'));
您在链接的存储库中找到了如何使用的详细信息。您在服务器上有shell访问权限吗?您不能只呼出***而期望创建cronjob。请阅读此处如何创建cronjob(假设您在运行linux的服务器上)@Dagon:我不知道。我会去看看。这是一个一次性事件,所以使用crontab
我想我们正在寻找使用php创建cronjob的解决方案,而不是使用任何终端或cpanel。我还想只使用php来找到这个解决方案。这只在加载页面时有效,基本上这不是一个解决方案!如果我关闭浏览器怎么办ser?这失败了!这在理论上是可行的,但php脚本必须一直运行,这不是一件好事。你必须将php最大执行时间设置为0才能永远运行。此外,如果脚本中出现错误,它将不会再次执行,直到你手动重新启动它。正如我所知
$deprecatedStatus = new ShellJob();
$deprecatedStatus->setCommand('cd /app && /usr/local/bin/php cron/updateDeprecatedStatus.php');
$deprecatedStatus->setSchedule(new CrontabSchedule('* * * * */2'));
$displayDate = new ShellJob();
$displayDate->setCommand('cd /app && /usr/local/bin/php cron/updateDisplayDate.php');
$displayDate->setSchedule(new CrontabSchedule('* * * * */5'));