Cron для Windows

Четверг, 14 Апр 2011 13:26
cron-dlya-windows

Появилась необходимость в ежедневно выполняемых с определенной периодичностью скриптах, причем запускаемых с локального хоста (стоит Denwer). Ясен пень, использовать придется либо cron с возможностью запуска php-скриптов, либо какие-нибудь windows-планировщики. Испробовал кучу вариантов, поэтому решил рассказать, каким образом в конечном итоге я вышел из ситуации.

Крон для Windows — nncron

В первую очередь я нагуглил тот факт, что классический cron — это вообще линуксовская штука. Но для винды также есть свои аналоги, самым продвинутым из которых признана очень мощная программа nncron. Программа в последних версиях работает на Windows 7 и является очень функциональным инструментом для планирования заданий на компьютере.

Поначалу я воспользовался встроенной возможность выполнения скриптов в nncron, прописав следующее:

S" http://localhost/mails/start_cron.php" HTTP-GET
IF
S" 123.html" FWRITE
ELSE 2DROP THEN

Этот скриптик отлично работает с одним «но». При КАЖДОМ выполнении скрипта в Windows на пару секунд выскакивает черное диалоговое окошко и затем пропадает. Причем это окошко может сбивать фокус и само по себе порядочно раздражает. Представьте себе, что у вас целыми днями каждые 5 минут мигает на экране диалог! Испытание не из простых. Избавиться от него можно, если выполнять скрипт с использованием не php.exe, а php-win.exe, который обязательно должен присутствовать в дистрибутиве вашего вебсервера. При этом также может понадобится принудительно подключать php.ini, поскольку ваш вебсервер по умолчанию может использовать php.ini из другой папки, и в таком случае вы можете лишиться всех дополнительно подключенных библиотек, как то curl, inocube и т.д., что сделает скрипты, их использующие, нерабочими.

Но вот настроить nncron на выполнение уже программы php-win.exe с параметрами php.ini и cron.php мне так и не удалось. Руководств под это дело кот наплакал, а в справке nncron я соответствующих примеров не нашел. Пробовал в nncron запускать программу по адресу d:\webserves\...\php-win.exe с параметрами -c d:\webservers\...\php.ini -a d:\webservers\...\cron.php, однако результатами мои попытки так и не увенчались.

nncron снес, так как терпеть все время выскакивающее окошко, если ты постоянно работаешь за компьютером, просто нереально. В то же время поставить его на серверную машину вполне можно.

Cron для Windows — планировщик заданий

Здесь я воспользовался инструкцией по настройке планировщика заданий в winXP (первая ссылка в материалах по теме), попытавшись проделать то же для Win7. Пробовал команду

D:\WebServers\usr\local\php5\php-win.exe -с D:\WebServers\usr\local\php5\php.ini -f D:\WebServers\home\script\www\cron.php,

но хотя скрипт и выполнялся, он все равно не работал. Установка заданию прав администратора тоже не помогла. Пришлось идти дальше.

Cron для Windows — автообновление страницы в Opera

В контекстном меню в Opera есть такая отличная опция Reload Every, в которой можно задать любое время для автообновления страницы. Собственно, так я и сделал: открываем в одной из закладок страницу крона localhost/script/cron.php, жмем правой кнопкой на странице и в контекстном меню в пункте Reload Every указываем нужное время. Быстро, просто, без напрягов. И все же осталось одно «но»: мой основной браузер Firefox, потому запущенная параллельно с ним Opera = -170Мб оперативы, что на моей машине ощутимо. Идем дальше.

Cron для Windows — автообновление страницы в Firefox

Вообще для Firefox давным-давно существовал плагин cronzilla, которому нужно было указать адрес скрипта и периодичность его выполнения, но в Firefox 4 он все еще не работает. Поэтому я попробовал найти аналоги опции в Opera, и наткнулся на замечательный плагин Reload Every, который полностью повторяет опцию reload every в контекстном меню в Opera с одним отличием — при перезапуске Firefox reload every надо запускать заново (в Opere это не требуется).

Cron для Windows - автообновление страницы в Firefox

Этот вариант, учитывая то, что браузер — первая программа, которая запускается на компьютере, меня устроил. Чтобы не мешали постоянно запущенные под cron вкладки, можно открывать их в новом окне.

Материалы по теме

  1. Запуск cron.php в windows
  2. Как сделать крон для Denwer'a

http://blogto4ka.ru

RSS комментариев

4 комментария Комментировать

  1. Seorubl пишет:

    14 Апр 2011 в 14:49 Reply to this comment

    1

    Может глупый вопрос, но я его задам. Я правильно понял, что описанный Вами алгоритм позволяет решать следующую задачу:

    1) У меня есть пхп скрипт

    2) Мне надо запускать(выполнять) этот скрипт периодически, например, каждый час.

    3) Для этого предлагается использовать браузер с настроенной на автообновление вкладкой.

    Вопрос следующий: Если браузер запустить в автозапуске и оставить в трее в ждущем режиме, эта фишка работать будет? Или надо обязательно явно запустить браузер и не сворачивать его никуда.

  2. nikolas_sharp пишет:

    14 Апр 2011 в 14:57 Reply to this comment

    2

    Да, верно поняли. Ждущим режимом вы назвали режим винды или процедуру сворачивания браузера в трей? Если вы настроите браузер как положено, а затем просто свернете его в трей, работать будет точно. Вебсервер, естественно, тоже должен быть включен. По совместимости с режимами винды не подскажу, поэкспериментируйте.

  3. Сергей пишет:

    17 Ноя 2011 в 8:14 Reply to this comment

    3

    При КАЖДОМ выполнении скрипта в Windows на пару секунд выскакивает черное диалоговое окошко и затем пропадает. Причем это окошко может сбивать фокус и само по себе порядочно раздражает. 

    Чтобы избежать этого, достаточно создать еще один профиль в Windows и выполнять задание от его имени ;)

  4. толик пишет:

    04 мая 2012 в 12:24 Reply to this comment

    4

    в nnCron при настройке задания можно задать чтобы задание выполнялось в hidden режиме

Оставьте свой комментарий о материале
(Комментарии со ссылками попадают на модерацию. Остальные не попадают, но я могу удалять те, которые посчитаю бесполезными, не несущими смысловой нагрузки)