Linux.org.ua

Технічні питання => Адміністрування => Гілку створено: Volodymyrko від 2007-05-10 09:29:44

Тема: ліміт часу на виконання php сценарію
Автор: Volodymyrko від 2007-05-10 09:29:44
На FreeBSD сервері в кроні є певний сценрій на php, виглядає так

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

(в основному він дуже багато працює з mysql)
але останнім часом він почав зивисати ...і дуже сильно вантажити с-му .... поки про причини не розібралися ... але він хоч якось повинен працювати.
   Тому стоїть питання як можна обмежити час його виконання, наприклда 3хв.,  ????
 чи то можна якось засобами php, почитав про set_time_limit, але в описі пише , шо воно впливає тільки на час виконання  самого сценарію без врахування часу потраченого на запти до БД, а  тут їх дуже багато ... , max_execution_time  - те саме ... -- так розумію мені вони  не підходять ....
може якось можна засобами шелу  ???
Тема: Re: ліміт часу на виконання php сценарію
Автор: Praporshic від 2007-05-10 10:46:36
Стосовно shell - не впевнений, але стосовно обмеження часу у login.conf - знаю точно. Там можна створити додатковий клас користувачів з обмеженням процесорного часу на кожен виклик чого-небудь, та запускати той сценарій від імені такого користувача.
Тема: Re: ліміт часу на виконання php сценарію
Автор: Volodymyrko від 2007-05-10 10:59:16
Цитата
апускати той сценарій від імені такого користувача
це є користувач www і під ним такод апач працює ... чи не приведе це до проблем з ним ... напевно таке не підійде
Тема: Re: ліміт часу на виконання php сценарію
Автор: Praporshic від 2007-05-10 11:29:27
А якщо використати іншого користувача?
Тема: Re: ліміт часу на виконання php сценарію
Автор: Володимир Лісівка від 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
Тема: Re: ліміт часу на виконання php сценарію
Автор: Volodymyrko від 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  - це часткові рішення ..
Тема: Re: ліміт часу на виконання php сценарію
Автор: PAL від 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", тощо
Тема: Re: ліміт часу на виконання php сценарію
Автор: Volodymyrko від 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  ???