Динамическое название терминала: показать состояние загрузки сервера с интервалом X секунд
Когда у меня в WM открыто несколько терминалов, было бы неплохо, если бы заголовки окон терминалов отражали текущего пользователя и хоста (легко), а также динамическую информацию о загрузке сервера, обновляемую через некоторый интервал (сложно).
Используя PROMPT_COMMAND, я могу получить нужные данные в заголовке окна терминала; однако, это требует, чтобы я что-то делал (например, менял каталоги), чтобы заголовок окна обновлялся самой последней информацией. В идеале, как и многие, я бы предпочел ничего не делать.
Итак, есть ли какая-то магия заданного интервала времени ожидания, которую я могу применить, чтобы динамически обновлять заголовок окна без вмешательства пользователя?
function curr_load {
# interval wrapper here, or somewhere at any rate ;-)
uptime
}
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME} [`curr_load`]\007"'
Спасибо за подсказки
2 ответа
Единственный способ, которым я знаю, - это фоновый процесс. Вы можете либо запустить это автоматически с помощью .bash_profile или схожим образом (но вы, вероятно, захотите проверить, были ли вы в xterm, а также это приведет к загрузке, поскольку это будет отображаться в каждом окне), или запустить его один раз вручную при входе в систему.
Например, используя приведенный выше код, создайте в PATH файл с именем printload set для exec, содержащий:
#!/bin/bash
function curr_load {
# interval wrapper here, or somewhere at any rate ;-)
uptime
}
while true;
do
echo -ne "\033]0;${USER}@${HOSTNAME} [`curr_load`]\007"
sleep 3
done
А затем просто начните печатать с:
printload &
Который вы, конечно, можете поместить в скрипт, который будет вызываться автоматически или вручную.
** ПРИМЕЧАНИЕ: не проверено на синтаксис, но должно работать теоретически **
Вот что я сделал, используя метод фоновых задач @Dave C с двумя исполняемыми сценариями bash на удаленном сервере: term-status и term-status-run.
#!/bin/bash
function curr_load { cat /proc/loadavg | awk '{print $1 " " $2 " " $3}' }
function mem_free {
cat /proc/meminfo | grep MemFree|awk '{print sprintf("%.0f", $2/1024)" MB"}'
}
while true;
do
echo -ne "\033]0;${USER}@${HOSTNAME} `mem_free` [`curr_load`]\007"
sleep 5
done
******
#!/bin/bash
~/scripts/./term-status &
Имея файлы на удаленном сервере, я изменяю существующие псевдонимы bash для ssh на целевые удаленные машины, добавляя команду для запуска при входе в систему следующим образом:
псевдоним goapache='ssh -i ${ключ} user@some-ip -t ~/scripts/./term-status-run; bash --login'
В моем оконном менеджере Linux (i3) стековые терминалы, подключенные к удаленному серверу, теперь имеют такие заголовки:
foo@serv1 226MB [0.43 0.50 0.35]
bar@serv2 332MB [0.23 0.38 0.27]
baz@serv3 295MB [0.15 0.22 0.26]
отражает свободную память и средние нагрузки с 5-секундными интервалами.
Делает хитрость, вроде приятно видеть состояние сервера в строке заголовка терминала, не говоря уже о том, что гораздо проще отличить локальные терминалы от удаленных.