Как создать работу 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"); ?> 

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

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

Это лучшее объяснение с кодом в 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. 

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

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

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 

Перейдите по ссылке для полной статьи, она объясняет:

  1. Каков формат cronjob, если вы хотите ввести / отредактировать его вручную.
  2. Как использовать PHP с библиотекой SSH2 для аутентификации в качестве пользователя, которую вы собираетесь редактировать.
  3. Полный PHP-класс со всеми необходимыми методами аутентификации, редактирования и удаления записей 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» в скрипте найдет подходящую программу для фактического запуска PHP-кода. Таким образом, для «исполняемой» версии добавьте права на выполнение для файла:

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

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

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

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

Звезды представляют (* означает каждый из этих единиц):

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

Вы могли бы прочитать еще об этом здесь .

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

  crontab -e 

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

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

Создайте 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; } } 

почему вы не используете завиток? логически, если вы выполняете файл php, вы будете выполнять это по URL-адресу в своем браузере. это очень просто, если вы запустите завиток

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