Автор Гілка: ліміт часу на виконання php сценарію  (Прочитано 1462 раз)

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
На FreeBSD сервері в кроні є певний сценрій на php, виглядає так

0,30 * * * *  cd /some/path; /path/php < scrion.php

(в основному він дуже багато працює з mysql)
але останнім часом він почав зивисати ...і дуже сильно вантажити с-му .... поки про причини не розібралися ... але він хоч якось повинен працювати.
   Тому стоїть питання як можна обмежити час його виконання, наприклда 3хв.,  ????
 чи то можна якось засобами php, почитав про set_time_limit, але в описі пише , шо воно впливає тільки на час виконання  самого сценарію без врахування часу потраченого на запти до БД, а  тут їх дуже багато ... , max_execution_time  - те саме ... -- так розумію мені вони  не підходять ....
може якось можна засобами шелу  ???
« Змінено: 2007-05-10 09:52:16 від vova07 »

Praporshic

  • Гість
Re: ліміт часу на виконання php сценарію
« Відповідей #1 : 2007-05-10 10:46:36 »
Стосовно shell - не впевнений, але стосовно обмеження часу у login.conf - знаю точно. Там можна створити додатковий клас користувачів з обмеженням процесорного часу на кожен виклик чого-небудь, та запускати той сценарій від імені такого користувача.

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Re: ліміт часу на виконання php сценарію
« Відповідей #2 : 2007-05-10 10:59:16 »
Цитата
апускати той сценарій від імені такого користувача
це є користувач www і під ним такод апач працює ... чи не приведе це до проблем з ним ... напевно таке не підійде

Praporshic

  • Гість
Re: ліміт часу на виконання php сценарію
« Відповідей #3 : 2007-05-10 11:29:27 »
А якщо використати іншого користувача?

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: ліміт часу на виконання php сценарію
« Відповідей #4 : 2007-05-10 14:12:36 »
На FreeBSD сервері в кроні є певний сценрій на php, виглядає так

0,30 * * * *  cd /some/path; /path/php < scrion.php

(в основному він дуже багато працює з mysql)
але останнім часом він почав зивисати ...і дуже сильно вантажити с-му .... поки про причини не розібралися ... але він хоч якось повинен працювати.
   Тому стоїть питання як можна обмежити час його виконання, наприклда 3хв.,  ????
 чи то можна якось засобами php, почитав про set_time_limit, але в описі пише , шо воно впливає тільки на час виконання  самого сценарію без врахування часу потраченого на запти до БД, а  тут їх дуже багато ... , max_execution_time  - те саме ... -- так розумію мені вони  не підходять ....
може якось можна засобами шелу  ???

Можна обмежити час виконання скрипта:

help ulimit:
Цитата
-t      the maximum amount of cpu time in second

Можна також виконувати завдання з нижчим пріорітетом, щоб воно сильно не заважало іншим (man nice).

Напр. (не тестував):

0,30 * * * *  cd /some/path; ulimit -t 120; nice /path/php < scrion.php
[Fedora Linux]

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Re: ліміт часу на виконання php сценарію
« Відповідей #5 : 2007-05-10 14:24:04 »
Цитата
але стосовно обмеження часу у login.conf - знаю точно
який саме там параметр відповідає за це ???

Цитата
А якщо використати іншого користувача?
можна пробувати, ле просто  сценаріїй підключає багато інших файлів, і всі вони належать саме йому... наприклад, просто з під root-а він не хоче виконуватись, видає багато помилок про права , safe_mode і .т.д.   Довго треба буде бавитись  щоб то все налаштувати ...

Цитата
Можна також виконувати завдання з нижчим пріорітетом, щоб воно сильно не заважало іншим (man nice).
про це думав..  це ж просто не так буде вантажити, але проблема в тому що він деколи зависає  на 1-2 дні ,  тільки kill  помагає .. не зовсім вихід ... ( цікаво що виконуючи з командного рядка ніколи ніяких помилок нема  )

Цитата
-t the maximum amount of cpu time in second
Наскільки я розумію це не є загальний час виконання .., ніщо не буде заважати йому висіти кілька годин ... просто знову ж таки менше буде вантажити ..

згідний, що ulimit i nice  - це часткові рішення ..

Відсутній PAL

  • Графоман
  • ****
  • дописів: 317
  • Карма: +0/-0
  • Just linux admin
Re: ліміт часу на виконання php сценарію
« Відповідей #6 : 2007-05-10 23:07:16 »
а що пан думає про таку дурну ідею:

пишему скрипта на зразок:

#!/bin/bash

cd /some/path;
/path/php < scrion.php &
PID=`jobs -p '/path/php < scrion.php'`
sleep 600
kill $PID

Звичайно, це скрипт нашвидкоруч, лише ідея. Треба ще дещо аналізувати - наприклад, замість pid може бути "no such job", тощо

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Re: ліміт часу на виконання php сценарію
« Відповідей #7 : 2007-05-11 09:05:46 »
На рахунок скрипта: я вчора зробив  щось схоже, просто в іншому скрипті який запускаю на 2 хв. пізніше по крону,  перевіряю на наявність в процесах того 1-го скрипта і якщо є вбиваю ...
kill_php_cron.sh
#!/bin/sh


pid=`ps waux | grep php|grep -v kill_php_cron |grep -v grep| awk '{printf $2 "\n"}'`
if [ "$pid" ]
then
    echo $pid
    kill $pid
fi
як на початок піде, ще можна думаю і обєданати то в один скрит,  добавити більше перевірок,  щоб інших php  не вбивав часом ...  думаю на цьому можна спинитися ..
Між іншим, в мене опції -p  в jobs  немає , є тільки -l

Так щоб не створювати нову тему, коротке запитання ... є директорія з файлами, які є кешом для певних php сторінок  ,  тих файлів є  ~500000  (раніше було 1,5 млн) , чи не забагато це  ??? і с-ки буде нормально , с-ма FreeBSD  ???