У нас есть длительный процесс на удаленном сервере, который время от времени запускается вручную. К сожалению, интернет-соединения умирают, ядра паники и целый ряд других проблем может возникнуть в сеансе ssh, используемом для подключения и запуска работы.
Экран кажется идеальным способом убедиться, что процесс не прерывается. Однако полагаться на то, что человек всегда будет помнить о запуске экрана, а затем запустить сценарий для запуска процесса, - это проблема, ожидающая своего часа. Можно ли из сценария проверить, вызывается ли сценарий изнутри экрана? Если это так, процесс будет продолжен, в противном случае сценарий завершится с сообщением, предлагающим пользователю сначала запустить экран.
Для этого есть переменная окружения. Если он выполняется на экране, $TERM
будет screen
. Это так просто; просто сделайте если на нем. Например,
if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi
будет отображать строку, когда на экране; foo иначе.
Пока вы работаете с экраном, почему бы не запустить скрипт с помощью nohup? Это также гарантирует, что он продолжит работать, если вы отключитесь.
По умолчанию он выводится в файл, поэтому вы можете использовать другие инструменты для отслеживания вывода скрипта, если хотите.