Как создать работу cron с помощью PHP?

Я новичок в работе cron. Я даже не знаю, как это написать. Я пытался искать из Интернета, но я до сих пор не понимаю его хорошо. Я хочу создать задание cron, которое будет выполнять мой код каждую минуту. Я использую PHP для его создания. Он не работает.

Пример

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");

?>

Предположим, что эти два файла находятся в одной папке.

Является ли код неправильным? Если не так, пожалуйста, скажите мне, как это исправить.

Ответ 1

Это лучшее объяснение с кодом в PHP, который я нашел до сих пор:

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

Короче:

Хотя синтаксис планирования нового задания может показаться сложным на первый взгляд, он на самом деле относительно просто понять, как только вы его сложите. Задача 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.

введите описание изображения здесь

Так, например, если бы планировалось задание на 12am в первый день каждого месяца, это выглядело бы примерно так:

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

Если бы мы планировали запуск задачи каждую субботу в 8:30, мы бы записали ее следующим образом:

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.

Ответ 2

Точно так же вы пытаетесь запустить cron.php, вы можете запустить другой PHP script. Вам нужно будет сделать это через интерфейс 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 script имеет исполняемые разрешения, он может быть указан непосредственно в crontab без части /usr/bin/php. Часть 'env php' в script найдет подходящую программу для фактического запуска PHP-кода. Таким образом, для "исполняемой" версии добавьте права на выполнение для файла:

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

а затем добавьте следующую запись в crontab:

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

Ответ 3

Добавлен в Alister, вы можете отредактировать crontab обычно (не всегда), введя crontab -e в сеансе ssh на сервере.

Звезды обозначают (* означает каждый из этих единиц):

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

Вы можете прочитать еще несколько здесь.

Ответ 4

Существует простой способ решить эту проблему: вы можете выполнить php файл с помощью cron каждые 1 минуту, а внутри исполняемого файла 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 */
}

Ответ 5

Введите следующее в терминале linux/ubuntu

 crontab -e 

выберите редактор (когда-то он запрашивает редактор) и это запускается каждую минуту

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

Ответ 6

Создайте cronjob, как это, чтобы работать каждую минуту

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

Ответ 7

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;
        }

}

Ответ 8

почему вы не используете завиток? логически, если вы выполняете файл 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);
}