Como executar um script em uma tela na reinicialização

2

Eu quero iniciar um servidor de bloqueio em uma tela na reinicialização, para que eu possa acessá-lo mais tarde.

O comando screen -d -m /home/dataserv/www/start_production_server.sh funciona muito bem independentemente de onde é chamado, mas não se usado como uma entrada crontab.

dataserv@dataserv-dev:~$ crontab -l
# m h  dom mon dow   command
@reboot echo "test" > /home/dataserv/reboot.txt 2>&1
@reboot screen -d -m /home/dataserv/www/start_production_server.sh

A entrada de teste funciona bem, então estou bastante confuso sobre o motivo de sua falha.

    
por Fabian Barkhau 26.12.2015 / 19:36

1 resposta

2

A execução do comando screen de cron e a captura de seu stderr informa esta mensagem:

Must run suid root for multiuser support.

Uma pesquisa rápida em torno dos resultados descobre que esta mensagem é impressa quando screen não possui o dispositivo tty do qual pode criar seu nome de sessão. (Normalmente, o nome da sessão é algo como 11597.pts-0.myhostname .) Outras leituras da página do manual mostram que o -S flag pode ser usado para especificar um nome de sessão:

screen -md -S "atboot.$(hostname)" ...

Não há nada de especial no rótulo "atboot"; Eu usei para me lembrar que o processo foi iniciado no momento da inicialização e não tinha um tty.

Combinar isso com sua especificação crontab leva a isso:

# m h  dom mon dow   command
@reboot echo "test" > /home/dataserv/reboot.txt 2>&1
@reboot screen -d -m -S "atboot.$(hostname)" /home/dataserv/www/start_production_server.sh

A execução de screen -ls fornecerá uma saída semelhante a esta:

11732.atboot.myhostname      (03/01/16 00:25:01)     (Detached)
    
por 03.01.2016 / 01:29