Использование cpulimit из PHP - PullRequest
1 голос
/ 18 ноября 2009

У меня есть сценарий, который планируется периодически запускать на производственном сервере клиента, чтобы импортировать некоторые данные со своего FTP-сервера. Это должно выполняться в соответствии с графиком, даже в течение дня, когда клиент работает. Время от времени сценарий занимает много ресурсов ЦП, что замедляет работу производственной среды. Я думал, что мог бы использовать cpulimit для управления процессом, но я не могу заставить его работать должным образом изнутри PHP. У меня есть сценарий песочницы со следующими строками:

$pid = getmypid();
exec("/usr/bin/cpulimit -p $pid -l 20 -z < /dev/null 2>&1 > /dev/null &");

Когда я получаю pid и запускаю эту точную команду из командной строки, она прекрасно работает. Однако когда я запускаю скрипт, я получаю [1]+ Stopped php web/sandbox/sandbox.php. Я много раз запускал фоновые задачи из PHP-скриптов. Что я могу делать не так?

Заранее спасибо,
~ JamesArmes

Ответы [ 2 ]

3 голосов
/ 19 ноября 2009

cpulimit ограничивает использование ЦП путем многократной отправки сигналов SIGSTOP и SIGCONT процесса. Управляя синхронизацией между этими сигналами, нагрузка на процессор снижается.

Когда вы запускаете cpulimit вручную, вы, вероятно, уже запускаете PHP-скрипт в фоновом режиме. Сценарий фактически остановлен, но поскольку он работает в фоновом режиме, ваша оболочка считает, что вам все равно, и не сообщает об этом.

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

Вы увидите, что в обоих случаях cpulimit фактически выполняет свою работу, единственное отличие состоит в том, как ваша оболочка обрабатывает ситуацию.

0 голосов
/ 18 ноября 2009

Что делает cpulimit? Это не команда в любой установке Fedora под рукой ....

Похоже, что он приостанавливает процесс, когда накапливается слишком много процессорного времени; как насчет использования nice вместо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...