Это мой первый вопрос на Stack Exchange! Я использую его годами и, кажется, всегда нахожу свое решение, кроме этого.

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

screen -S TOP -D -m top -b -p $PID > top.log &

Это должно сделать то, что он должен создать новый экранный сеанс с именем top, затем отсоединиться от него при создании и запустить команду top так, чтобы создать двоичный файл top.log и поместить его в фоновый режим.

Все работает хорошо, за исключением того, что файл создан, но не заполнен какими-либо основными данными, тогда как когда я запускаю команду без экрана, она работает нормально.Похоже, экран не рассматривает перенаправление как часть команды top, но в любом случае создает файл, возможно, как часть отдельной команды.

На данный момент я по умолчанию использовал nohup для запуска top в фоновом режиме, но я бы очень хотел иметь возможность присоединиться к экрану.

Есть идеи?

3 ответа3

0

Пытаться:

$(screen -S TOP -D -m top -b -p $PID > top.log) &
0

Ваше перенаправление будет относиться только к выводу самой screen команды, а не к выводу в экранном терминале. Я предлагаю вам создать специальный файл screenrc для этого экземпляра экрана со следующим содержимым:

session top -b -p $MYPID
sessionname TOP
logfile /path/to/top.log
log on
detach

Переменная среды MYPID должна быть установлена перед вызовом screen команды. Затем вы вызываете screen используя опцию -c и имя файла screenrc :

MYPID=$PID screen -c /path/to/top-screenrc

Файл screenrc содержит screen команды, как описано на странице руководства. Сначала он создает новый сеанс с именем top , задает имя сеанса, определяет для него файл журнала, затем начинает запись. В качестве последнего шага сеанс отсоединяется, и команда возвращается к приглашению. Вам не нужно будет явно отправлять его в фоновом режиме (то есть добавлять & не нужно).

Я надеюсь, что это соответствует вашей проблеме.

0

Это не экран, а скорее оболочка (я полагаю, bash), которая перенаправляет вывод. Предоставленная командная строка перенаправит вывод из экранной программы, а не из сеанса экрана с именем TOP:

screen -S TOP -D -m top -b -p $PID > top.log &

Я бы попробовал это дальше:

screen -S TOP -D -m " top -b -p $PID > top.log " &

Возможно, вам понадобится превратить команду top в файл сценария, состоящий из одной строки, если screen обрабатывает раздел в кавычках как одну команду или имя файла и не работает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .