Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

четверг, 4 февраля 2010 г.

Как запустить PHP скрипт с помощью Cron

Этот пост родился потому, как я много времени потратил на поиски решения в интернете. А именно - как запустить PHP скрипт в заданное время. Надеюсь кому-то эта информация поможет ускориться.

Первое что пришло в голову - Cron. Про него я слышал на своей прошлой работе, но никогда не имел с ним дело. Начал ковырять. Для начала я подключился с помощью PuTTY к серверу и узнал, что на нем стоит FreeBSD. Итого в Google пошел запрос "FreeBSD + Cron + PHP". Там узнал много интересного. Этим и поделюсь. Интересно? Жмем тут.

Для начала я скажу, что запустить скрипт напрямую мне не удалось (если кто знает как - прошу поделитесь). Зато я воспользовался Wget, который по задумке загружает файл из сети по HTTP или FTP (быть может еще как-то). Вот линк на руководство по этой тулзе.

В проекте использовался RewriteEngine и в папке проекта находился файл .htaccess, в котором я описал rule, по которому можно достучаться до необходимого мне PHP скрипта. В общем задача была - сделать так, чтобы из браузера, допустим по линку "http://bla.bla.bla/runme" можно было вызвать исходный скрипт.

Хорошо, из браузера скрипт запускается. Теперь я подключился через PuTTY к серваку и в консоли ввел "crontab -e". Эта команда отправила меня в редактор, в котором по началу было очень неудобно работать.

Чтобы что-то удалить надо было нажать Esc а потом удалять текст кнопкой "x". Чтобы начать редактировать - надо было нажать Esc а потом "i" (латинница). Чтобы сохранить введенную cron-rules надо было в конце строки в режиме редактирования нажать Enter - только так рула заработает. А для сохранения и выхода из редактора - Esc а потом ":wq" и Enter. Если нужно выйти без сохранения, а такое часто случалось потому, что неудобно было редактировать - жмем Esc а потом ":q!" и Enter. (кавычки в этих "i" "x" ":wq" ":q!" всех случаях вводить не надо).

Дальше командой "crontab -l" можно было просмотреть что же там было введено. 

Повторяться не буду - что именно вводить в редакторе (какой синтаксис Cron rules) описано хорошо тут.

Для меня задача стояла запускать скрипт каждый час, допустим в XX:45. И я записал туда:
45 * * * * /usr/local/bin/wget -q http://bla.bla.bla/runme
 /usr/local/bin/wget - путь к программе Wget
-q -выключить сообщения Wget.
http://bla.bla.bla/runme адресс по которому из браузера можно запустить скрипт.

Ну и все :)

12 комментариев:

  1. ты также можешь использовать DB scheduling, если мы говорим о DB layer

    ОтветитьУдалить
  2. Спасибо написано очень доходчиво :)
    Хочу добавить от себя детальное описание процесса настройки крона
    вручную и через панельку DirectAdmin http://private-seo-soft.blogspot.com/2010/04/crontab.html

    ОтветитьУдалить
  3. Анонимный1 мая 2010 г., 19:19

    Это не оно?
    http://masterhost.ru/support/doc/cron/

    ОтветитьУдалить
  4. статья с набором линков, одна из форм продвижения! никакого анализа и разклада.
    Возможно для новичков "походить" дальше.

    ОтветитьУдалить
  5. Спасибо написано очень доходчиво :)
    Хочу добавить от себя детальное описание процесса настройки крона

    ОтветитьУдалить
  6. Та не статья это вовсе, а всего лишь заметка. Некоторое время потратил, чтобы наковырять эту информацию и решил запомнить ее, в первую очередь, для себя. А если она кому-то еще и помогла - то это уже сверхприбыль.

    Спасибо за Ваши комментарии.

    ОтветитьУдалить
  7. мучаюсь, мучаюсь, всеравно ошибка...
    /home2/netupy/autoposting/twipostoauth.php

    что не так?

    ОтветитьУдалить
  8. а командой "php -f /dir/file.php" запускать не получилось ?

    ОтветитьУдалить
  9. Описание работы в vi доставило.

    ОтветитьУдалить
  10. Этот комментарий был удален администратором блога.

    ОтветитьУдалить