2013-09-11 4 views
66

Я новичок в работе cron. Я даже не знаю, как это написать. Я пытался искать из Интернета, но я до сих пор не понимаю его хорошо. Я хочу создать задание cron, которое будет выполнять мой код каждую минуту. Я использую PHP для его создания. Это не работает.Как создать работу 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"); 

?> 

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

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

+0

у вас есть доступ к оболочке на сервере? –

+6

Вы не можете просто откликнуться *** и ожидать создания cronjob. Читайте здесь, как создавать cronjob (при условии, что вы находитесь на сервере с Linux) http://www.thesitewizard.com/general/set-cron-job.shtml – tlenss

+0

@ Дагон: я не знаю об этом. Я проверю это. – user2738520

ответ

-1

Создать cronjob как это работать на каждую минуту

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

OP нуждается в дополнительной помощи, чем это, где поставить эту строку кода –

+1

Я думаю, что мы ищем решения для создания cronjob с использованием php и без использования каких-либо терминалов или cpanel. Я также хочу найти это решение, используя только php. – user3264863

28

Точно так же вы пытаетесь запустить cron.php, вы можете запустить другой скрипт. Вы должны будете сделать это через интерфейс CLI.

#!/usr/bin/env php 
<?php 
# This file would be say, '/usr/local/bin/run.php' 
// code 
echo "this was run from CRON" 

Затем добавьте запись в кронтаб:

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

Если сценарий run.php имел исполняемые права доступа, его можно указать непосредственно в кронтаб, без/USR/BIN/PHP часть также. Часть «env php» в скрипте найдет подходящую программу для фактического запуска PHP-кода. Таким образом, для «исполняемой» версии добавить исполняемое разрешение на файл:

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

, а затем добавьте следующую запись в кронтаб:

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

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

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

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

Вы можете прочитать некоторые больше о this here.

1

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

crontab -e 

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

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

'&>/dev/null' http://unix.stackexchange.com/a/70971/152203 – yckart

38

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

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

Вкратце:

Хотя синтаксис планирования нового задания может показаться сложным на первый взгляд, на самом деле это относительно просто понять, как только вы его сложите. Хрон всегда будет иметь пять столбцов, каждый из которых представляют собой хронологический «оператор», за которой следует полный путь и команду для выполнения:

* * * * * дом/путь/к/команде/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. 

enter image description here

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

0 0 1 * * дом/путь/к/команде/the_command.sh

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

30 8 * 6 дома/путь/к/команде/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 для аутентификации в качестве пользователя, который crontab вы собираетесь редактировать.
  3. Полный PHP-класс со всеми необходимыми методами аутентификации, редактирования и удаления записей crontab.
0
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; 
     } 

} 
4

Существует простой способ решить эту проблему: вы можете выполнить файл PHP по хронам каждую 1 минуту, а внутри PHP исполняемого файла сделать «если» заявление для выполнения, когда время «сейчас», как этот

<?/** 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 */ 
} 
+1

Это будет работать только при загрузке страницы, в основном это не решение! –

-1

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

Это будет работать теоретически, но php-скрипт должен работать все время, что не очень хорошо. – bestprogrammerintheworld

0

$command = "php ".CRON_PATH.php "; 
 
if(substr(php_uname(), 0, 7) == "Windows"){ 
 
pclose(popen("start /B ". $command, "r")); 
 
}else{ 
 
shell_exec($command ." > /dev/null &"); 
 
}

Смежные вопросы