Como eu crio várias sessões de tela na inicialização no Linux?

3

Primeiramente, qual é a melhor maneira de executar comandos na inicialização, cron? Posso usar su em um script de shell para alternar entre usuários diferentes? Se sim, como?

Como faço para criar várias sessões screen desanexadas na inicialização? screen -A -m -d -S test ./script.sh parece que deve funcionar, mas usá-lo em um script iniciado pelo cron não mostra nenhuma sessão de tela em execução após a inicialização.

Parece que a sessão de tela é fechada após o término da execução do comando. Posso mantê-la aberta para que eu possa ver a saída?

Obrigado!

    
por Jacob Hawkins 10.10.2010 / 10:14

3 respostas

7

Para executar um comando quando o sistema é inicializado, agende-o para @reboot no cron. Veja man 5 crontab para detalhes. Isso significa que sua linha crontab deve se parecer com

@reboot screen -m ...

Não use su para isso, coloque o comando no crontab do usuário que deve executar o comando. Dessa forma, o usuário pode gerenciar os comandos sem a intervenção do root. (Mas se você quiser executar um comando como usuário do sistema sem permitir que o usuário do sistema altere o comando por motivos de segurança, algo como su -c /path/to/command www-data in /etc/rc.local seria melhor.)

A tela fecha uma janela quando seu comando termina e termina a sessão quando sua última janela é fechada. Se você quiser ver a saída do script após a conclusão, execute outro comando após ele para aguardar a entrada. Por exemplo, para deixar a janela aberta até você pressionar Enter :

screen sh -c './script.sh; read'

Lembre-se de que a tela mantém apenas um número finito de linhas de histórico. A menos que script.sh às vezes exija interação, você seria mais bem servido redirecionando sua saída para um arquivo. Se isso requer interação, você pode usar o comando log da tela para enviar a saída para um arquivo (e então não é um problema se a sessão da tela terminar quando não requer entrada).

    
por 10.10.2010 / 11:02
2

Você já tentou screen -AmdS test bash -i ./script.sh ?

Eu imagino que o que está acontecendo é que ele inicia a tela, que executa o script, e quando o script sai, a tela é encerrada. a parte bash -i diz para a tela iniciar o bash no modo interativo e depois ter o bash executando o script. Uma vez que o script tenha sido executado, o bash continuará aguardando em um prompt de comando, mantendo a sessão da tela aberta para você anexar ao fazer login no sistema.

    
por 10.10.2010 / 11:02
1

Crie um script que faça o que você quer. Se alternar entre usuários para apenas um único comando, vá em frente e use su -c . Caso contrário, crie um script separado e chame-o.

Em seguida, para que seu comando seja executado na inicialização, coloque o comando para executar seu script em /etc/rc.d/rc.local

    
por 10.10.2010 / 14:41