3

Это странная ситуация, с которой я столкнулся. У нас есть тестовый сервер вне сайта (или вне сайта, с которого я работаю). Чтобы получить доступ к серверу, мне нужно VPN в его сети.

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

  1. Я оторвался от сессии
  2. выполнил экран -ls для проверки PID
  3. ps -ef | экран grep
  4. screen -r PID

Я мог видеть сеанс экрана после выполнения этих команд и повторного присоединения / отсоединения к сеансу.

Вот странная часть. Я возвращаюсь на следующий день и нет экранных сессий. Я запустил эти cmds выше, чтобы проверить, но там ничего нет. Тем не менее, мой процесс все еще работает. Я не использовал nohup для запуска своего процесса, но по какой-то счастливой причине мой процесс не умер с сеансом.

Кто-нибудь знает, что могло случиться? Почему я потерял сеанс экрана и почему мне повезло, и мой процесс продолжался?

Спасибо за любое просвещение. знак равно

2 ответа2

4

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

В некоторых системах есть очистители tmp, которые удаляют файлы в /tmp , /var/tmp , /var/run или аналогичных. Это может привести к тому, что screen не сможет найти свои файлы сокетов. Если вы можете идентифицировать PID вашего сеанса, вы можете выполнить kill -CHLD <PID> чтобы сообщить screen о необходимости переписать файл сокета. После этого screen -r должен снова работать.

Если это то, что происходит, вам, вероятно, следует настроить screen чтобы использовать другой каталог для своих сокетов.

0

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

У нас было запущено несколько экранных сессий, каждая со своим долгосрочным заданием (для простоты мы будем называть его сессиями A и B). Задание в сеансе А завершено досрочно, и этот сеанс вернулся к приглашению. Когда период ожидания истек из-за неактивности, он вышел из сеанса А. Сессия B все еще выполняет свою работу, когда это произошло, но мы думаем, что когда родительский процесс умирает (в данном случае экран), он забирает все сеансы.

Процесс, который был запущен в сеансе B, теперь наследуется родителем экрана, который является процессом init или процессом 1 и, таким образом, продолжает работать, когда мы проверили следующее утро.

Эта гипотеза была подкреплена проведением эксперимента. Это было запущено на Centos. Мы запустили экран и открыли две сессии. На одном сеансе мы периодически запускали cmd, чтобы поддерживать его. Другой мы проигнорировали. Примерно через 10 минут экран был прерван, и вместе с ним открылись обе сессии.

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