Linux - cria tela como outro usuário

1

Estou tentando criar um novo screen no meu servidor (CentOS 5.11), mas, em vez de iniciá-lo com meu usuário, prefiro usar outro usuário com permissões restritas, só para estar no lado seguro.

Então, depois de ler um pouco sobre o motivo da tela dentro do script

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

e tudo funcionou bem. Consegui acessá-lo mesmo com screen -x <user>/testN (destinado a ser usado por 3 ou 4 usuários da máquina). Então, tudo em uma linha deve ser ...

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

mas (agora) por algum motivo, quando eu faço sudo su - <user> bash -c 'screen -ls' a tela está morta e não consigo anexar essa tela como antes.

There is a screen on: 24120.testN (Dead ???) Remove dead screens with 'screen -wipe'.

Alguém encontrou um problema semelhante? Qualquer ideia sobre um caminho mais fácil será bem-vinda.

Meu .screenrc é apenas uma configuração que configura a tela para ser acessada por outros usuários, não parece ter qualquer relação com o problema.

    
por Octal 04.03.2016 / 01:21

1 resposta

1

Esta é uma condição de corrida divertida. Ao configurar sua sessão de tela, garfos de tela. O pai sai, o filho configura a sessão, executa o comando e assim por diante. Mas, no seu comando, depois que o pai sai, toda a sua cadeia ancestral é feita e sai. Ao longo do caminho, o terminal de controle é fechado, o que envia um SIGHUP para o grupo de processos em primeiro plano: o único processo ali é o processo da tela filho. Como isso ainda não teve necessariamente tempo para configurar seu tratamento de sinal, o manipulador padrão para SIGHUP é executado: o processo sai.

A criança provavelmente perderá sempre essa corrida, porque primeiro gasta tempo fazendo vários acessos ao sistema de arquivos para configurar o soquete de comunicação, todos os quais são pontos de interrupção nos quais a cascata de pais de saída pode ser executada.

A boa notícia é que, se você está tentando iniciar isso apenas para interativamente anexar à sessão com outros usuários, quase toda a linha de comando que você está usando é desnecessária (o comando "script" não adiciona nada - a questão você linka menciona "problemas" não específicos, mas a menos que você tenha um desses, não o cultive; você também não precisa do material "su -", nada que ele configura é necessário para o processo inicial da tela, e tudo que se importa precisa ser configurado pela tela de qualquer maneira).

sudo -u $OTHERUSER screen -c /path/to/screenrc -d -m -S testN ping google.com
    
por 21.03.2016 / 01:09