Ошибка: TERM environment variable not set?

Доброго времени суток!

Есть bash-скрипт, в котором в одном из мест выполняется команда
echo `top -n1 | grep Cpu | awk '{print $2}'` >> $PWD'/logs/meter-proc.log'

Строчка записывает в файл текущую загрузку процессора в %.

При вызове ещё через ssh-консоль проблем никаких нет - всё корректно. Но скрипт необходимо вызывать из PHP. Делаю это так:

$descriptorspec = array(0 => array("pipe", "r"),
 1 => array("pipe", "w"),
2 => array("file", "logs/error-output.log", "a"));

$process = proc_open(__DIR__.'/meter.sh', $descriptorspec, $pipes);


Процесс корректно запускается, однако выдаёт ошибку "TERM environment variable not set" именно в месте вызова top. Понял, что данная переменная пуста.

Пробовал вручную записывать в TERM значения xterm, linux, но в любом из этих случаев начинает вылезать ошибка "top failed tty get".

Собственно говоря: как исправить ошибку с TERM при вызове из PHP, либо как иначе получать текущую загрузку процессора в % минуя использование top?

Всё действие происходит на Ubuntu server.

Заранее большое спасибо!

P.S. Прежде чем задавать вопрос долго пробовал спрашивать у Гугла, но без успешно :(
  • Вопрос задан
  • 10407 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
Для запуска top, нужно использовать псевдо/или/терминал (/dev/(p)tty), иначе библиотека termcap не сможет на нем работать. Как запустить процесс в php с использованием псевдотерминала - не знаю.
Или установить sar (sysstat) и использовать утилиту mpstat.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы