Linux.org.ua
Технічні питання => Адміністрування => Гілку створено: 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 - те саме ... -- так розумію мені вони не підходять ....
може якось можна засобами шелу ???
-
Стосовно shell - не впевнений, але стосовно обмеження часу у login.conf - знаю точно. Там можна створити додатковий клас користувачів з обмеженням процесорного часу на кожен виклик чого-небудь, та запускати той сценарій від імені такого користувача.
-
апускати той сценарій від імені такого користувача
це є користувач www і під ним такод апач працює ... чи не приведе це до проблем з ним ... напевно таке не підійде
-
А якщо використати іншого користувача?
-
На 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
-
але стосовно обмеження часу у login.conf - знаю точно
який саме там параметр відповідає за це ???
А якщо використати іншого користувача?
можна пробувати, ле просто сценаріїй підключає багато інших файлів, і всі вони належать саме йому... наприклад, просто з під root-а він не хоче виконуватись, видає багато помилок про права , safe_mode і .т.д. Довго треба буде бавитись щоб то все налаштувати ...
Можна також виконувати завдання з нижчим пріорітетом, щоб воно сильно не заважало іншим (man nice).
про це думав.. це ж просто не так буде вантажити, але проблема в тому що він деколи зависає на 1-2 дні , тільки kill помагає .. не зовсім вихід ... ( цікаво що виконуючи з командного рядка ніколи ніяких помилок нема )
-t the maximum amount of cpu time in second
Наскільки я розумію це не є загальний час виконання .., ніщо не буде заважати йому висіти кілька годин ... просто знову ж таки менше буде вантажити ..
згідний, що ulimit i nice - це часткові рішення ..
-
а що пан думає про таку дурну ідею:
пишему скрипта на зразок:
#!/bin/bash
cd /some/path;
/path/php < scrion.php &
PID=`jobs -p '/path/php < scrion.php'`
sleep 600
kill $PID
Звичайно, це скрипт нашвидкоруч, лише ідея. Треба ще дещо аналізувати - наприклад, замість pid може бути "no such job", тощо
-
На рахунок скрипта: я вчора зробив щось схоже, просто в іншому скрипті який запускаю на 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 ???