Назад | Перейти на главную страницу

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

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

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

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

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

будет отображать строку, когда на экране; foo иначе.

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

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