Em primeiro lugar, qual é a melhor maneira de executar comandos na inicialização, cron? Posso usar su
um script de shell para alternar entre diferentes usuários, em caso afirmativo, como?
Como posso criar várias screen
sessões desanexadas na inicialização? screen -A -m -d -S test ./script.sh
parece que deveria 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 da tela é fechada após a execução do comando. Posso mantê-la aberta para ver a saída?
Obrigado!
Responder1
Para executar um comando quando o sistema inicializar, agende-o @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 deverá 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
seria /etc/rc.local
melhor.)
Screen fecha uma janela quando seu comando termina e encerra a sessão quando sua última janela é fechada. Se você quiser ver a saída do script após sua conclusão, execute outro comando depois dele para aguardar a entrada. Por exemplo, para deixar a janela aberta até pressioná- Enterla:
screen sh -c './script.sh; read'
Lembre-se de que a tela mantém apenas um número finito de linhas do histórico. A menos que script.sh
às vezes exija interação, seria melhor redirecionar sua saída para um arquivo. Se exigir interação, você pode usar log
o comando da tela para enviar a saída para um arquivo (e então não será um problema se a sessão da tela terminar quando não exigir entrada).
Responder2
Você tentou screen -AmdS test bash -i ./script.sh
?
Imagino que o que está acontecendo é que ele inicia a tela, que executa o script, e quando o script termina, a tela termina. a bash -i
parte diz à tela para iniciar o bash no modo interativo e, em seguida, fazer com que o bash execute o script. Depois que o script for executado, o bash continuará aguardando em um prompt de comando, mantendo a sessão de tela aberta para você anexar assim que fizer login no sistema.
Responder3
Crie um script que faça o que você deseja. Se estiver alternando 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.
Então, para que seu comando seja executado na inicialização, coloque o comando para executar seu script em/etc/rc.d/rc.local