如何使用PHP创建cron作业?

如何使用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作业。我甚至不知道怎么写。我试着在网上搜索,但我还是不太懂。我想创建一个cron作业,它每分钟都会执行我的代码。我正在使用PHP创建它。它不起作用

示例

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


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
访问完整文章的链接,它解释:

  • 如果要手动输入/编辑cronjob,它的格式是什么
  • 如何使用PHP和SSH2库作为用户进行身份验证,您将编辑哪个crontab
  • 完整的PHP类,包含身份验证、编辑和删除crontab项所需的所有方法

  • 有一种简单的方法可以解决这个问题:您可以每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作业的文件 打开
  • 使用您的cronjob计划编辑该文件为
    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'));