Возможно ли в скрипте сказать, запускается ли он из экрана GNU?

10

У нас есть длительный процесс на удаленном сервере, который время от времени запускается вручную. К сожалению, интернет-соединения прерываются, паника ядра и целый ряд других проблем могут возникнуть в сеансе ssh, который используется для подключения и запуска задания.

Экран, кажется, идеальный способ убедиться, что процесс не прерывается. Однако полагаться на то, что человек всегда помнит о том, чтобы запустить экран, а затем запустить сценарий для запуска процесса, - это проблема, ожидающая своего появления. Есть ли способ из сценария, который я могу проверить, чтобы увидеть, вызывается ли сценарий из экрана? Если это так, процесс продолжится, в противном случае скрипт завершит работу с сообщением, указывающим пользователю сначала запустить экран.

cclark
источник
Возможный дубликат Как я знаю, что я работаю внутри "экрана" Linux или нет?
Эндрю Шульман

Ответы:

11

Для этого есть переменная окружения. Если он запускается на экране, $TERMбудет screen. Это так просто; просто сделай если на нем. Например,

if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi

будет эхо-бар, когда на экране; фу иначе.

Сокол Момот
источник
2
Это также может быть, screen-256colorесли пользователь настроил поддержку 256 цветов.
августа
или screen-bce в системах с установленным byobu. echo $ TERM screen-
bce
7

Пока вы работаете с экраном, почему бы не запустить скрипт с помощью nohup? Это также гарантирует, что он продолжит работать, если вы отключитесь.

Он выводит в файл по умолчанию, так что вы можете использовать другие инструменты для мониторинга вывода скрипта, если хотите.

Magellan
источник
1
Хотя запуск с nohup обеспечит тот же результат, что и процесс будет продолжаться, разве у меня не возникнет та же проблема, что кто-то может забыть запустить скрипт с nohup? Или в скрипте есть способ убедиться, что используется nohup, или мне нужно создать скрипт-обертку, который вызывает мой оригинальный скрипт с nohup?
cclark
Да уж. Хотя я люблю своих падаванов (младших сисадминов) так же, как я люблю своих детей, они часто забывают такие вещи. Таким образом, все оборачивается так, что им не нужно запоминать, что нужно вводить для добавления префиксов к важным командам.
Магеллан