1

Я пытаюсь создать новый screen на моем сервере (CentOS 5.11), но вместо того, чтобы запускать его с моим пользователем, я бы предпочел использовать другого пользователя с ограниченными разрешениями, просто чтобы быть в безопасности.

Итак, после прочтения немного о причине экрана внутри скрипта это казалось простым:

  1. sudo su - <user> bash
  2. script /dev/null
  3. screen -c .screenrc -d -m -S testN ping google.com
  4. exit

и все работало нормально. Я смог получить к нему доступ даже с помощью screen -x <user>/testN (предназначенного для 3 или 4 пользователей машины). Итак, все в одной строке должно быть ...

sudo su - <user> bash -c 'script -c "screen -c .screenrc -d -m -S testN ping google.com; exit;" /dev/null'

но (сейчас) по какой-то причине, когда я делаю sudo su - <user> bash -c 'screen -ls' экран мертв, и я не могу прикрепить этот экран, как раньше.

Есть экран на:24120.testN (Dead ???) Удалите мертвые экраны с помощью 'screen-wipe'.

Кто-нибудь сталкивался с подобной проблемой? Любые идеи о более простом пути, будут приветствоваться.

Мой .screenrc - это просто конфигурация, которая устанавливает доступность экрана для других пользователей, похоже, не имеет никакого отношения к проблеме.

1 ответ1

1

Это забавное состояние гонки. При настройке сеанса экрана экран разветвляется. Родитель выходит, потом настраивает сеанс, запускает команду и так далее. Но, по вашей команде, после того, как родитель выходит, вся его наследственная цепь завершается и выходит. Попутно управляющий терминал закрывается, что отправляет SIGHUP в группу процессов переднего плана: единственный процесс - это процесс дочернего экрана. Поскольку у этого еще не было времени настроить обработку сигналов, выполняется обработчик по умолчанию для SIGHUP : процесс завершается.

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

Хорошая новость заключается в том, что, если вы пытаетесь запустить это только для интерактивного подключения к сеансу с другими пользователями, почти вся используемая вами командная строка не нужна (команда "script" ничего не добавляет - упоминаемый вами вопрос упоминается неспецифические "проблемы", но если у вас нет одной из них, не выполняйте ее культивирование, вам также не нужны вещи "su -", ничего, что они устанавливают, не требуется для начального процесса экрана и все, что волнует в любом случае это нужно настроить по экрану).

sudo -u $OTHERUSER screen -c /path/to/screenrc -d -m -S testN ping google.com

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