Запуск скриптов PHP (модуль Apache) из Crona?

corvus

Guest
Запуск скриптов PHP (модуль Apache) из Crona?

Можно ли запускать PHP скрипты через Cron,
если PHP установлен как модуль Apache ???

Пересмотрел кучу источников, пишут
что если PHP установлен как CGI, то нет проблем.
Тут два варианта:
1) первую строку скрипта пишем
#! /path_to_binary_php/php
в Crontab пишем
*/10 * * * * /path_to_script/myscript.php >/dev/null/
2) в Crontab пишем сразу
*/10 * * * * /path_to_binary_php/php /path_to_script/myscript.php >/dev/null/
И всё должно работать!

Перепробовал оба варианта ( PHP установлен как модуль Apache)
- оба не работают.
Первый вариант пишет "bad interpretator in line 1"
при втором вообще ничего не происходит.
Однако если запустить из shell
вручную строку
/path_to_binary_php/php /path_to_script/myscript.php >/dev/null/
или даже
php /path_to_script/myscript.php >/dev/null/
то всё работает!

В ряде источников пишут, что если PHP установлен как модуль Apache,
бинарный РНР запускаться не будет. Ума не приложу, почему???
Ведь из шелла запускается!

Рекомендуют в этом случае использовать get, wget или lynx.
Добавляем в сrontab
*/10 * * * * lynx -dump http://mydomen/path_to_script/myscript.php

То есть в этом случае (так же как и при использовании get, wget)
скрипт вызывается через Веб по полному URL со всеми вытекающими последствиями
(30-секундный лимит времени, 8-метровый лимит памяти).
Мой скрипт (а он коннектится к другому серваку, скачивает полуметровый файл, парсит его
и кладёт в базу несколько тысяч записей) в этом случае еле укладывается в 30 сек.
А если через шелл запустить ручками, то работает всего 2-3 секунды!
Естественно, хочется чтоб так же и через cron работал.
Я уж не говорю о безопасности: в этом случае права 700, всё ОК,
а если через веб, то права 644, и в принципе любой куулхацкер сможет
завесить мой сервак, пронюхав про наличие такого скрипта и послав ему кучу запросов.
Прошу помощи.
 

confguru

ExAdmin
Команда форума
Во первых лимит времени можно отменить
Во вторых наверняка скрипт работает 30
сек всегда - просто ты этого не видишь ,)
Сделай проверку - на REMOTE_ADDR
и хитрый ключ доступа
 

corvus

Guest
Нет, именно через шеллл скрипт работает 2-3 секунды. Если я включаю эхо, например, запросов на базу, то за эти две секунды передо мной на экране Putty промелькивают все несколько тысяч запросов к базе (которые при вызове скрипта через веб проползают на экране браузера за 30 секунд). А по существу, почему скрипт работает через шелл и не работает через крон??
 

AndreyS

Guest
Возможен вариант запуска shell-a под jail например,
с монтированием дополнительных директорий с бинарниками типа /usr/bin, /usr/sbin и т.п. , а для cron-a такой "радости" не сделали. Тогда будет такой эффект.

Вариант - положить свой бинарник php в домашнюю
директорию и использовать его. Правда компилировать его тогда желательно как полностью статический со всеми либами.
 

corvus

Guest
>Вариант - положить свой бинарник php в домашнюю
>директорию и использовать его. Правда компилировать его >тогда желательно как полностью статический со всеми >либами.

Благодарю, я и сам склонялся к такому варианту.
 
Сверху