Iniciando script na tela com cron

Iniciando script na tela com cron

Peço desculpas se isso já foi perguntado antes, mas não sei como questionar uma consulta de pesquisa sobre isso. Sou extremamente novo no Linux e tenho aprendido à medida que resolvo problemas.

Estou tentando configurar cron jobs funcionais para reiniciar um servidor de jogos que estou executando.

Atualmente meu crontab está assim

#backup world as instructed by https://github.com/g1franc/SEDS-Setup
0 0 * * * /home/root/spaceengineers/start.sh backupworld
#close server
1 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^C"
#close screen
2 0 * * * /usr/bin/screen -S spaceengineers -X stuff "^M"
#recreate server
3 0 * * * /home/root/spaceengineers/start.sh

Agora, no mundo do backup, entro no meu arquivo syslog localizado em /var/logi get

May 24 00:00:01 SpaceEngineers CRON[1958]: (root) CMD (/home/root/spaceengineers/start.sh backupworld)
May 24 00:00:01 SpaceEngineers CRON[1957]: (CRON) info (No MTA installed, discarding output)

e isso também é o mesmo com o servidor de recriação

May 24 00:03:01 SpaceEngineers CRON[2269]: (root) CMD (/home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers)
May 24 00:03:01 SpaceEngineers CRON[2268]: (CRON) info (No MTA installed, discarding output)

Os outros comandos funcionam perfeitamente bem.

agora, antes que alguém pergunte por que estruturei meu código da maneira que fiz, é porque o tutorial que eu estava seguindo diz para iniciar o servidor ~/spaceengineers/start.sh -x spaceengineers e pelo que li, preciso fazer /usr/bin/screen para acessar qualquer comando de tela em Cron

O que estou fazendo de errado e o que preciso fazer para corrigir meus problemas.

EDITADO:Alterei o crontab para corresponder ao conteúdo atual do meu servidor, os problemas permanecem os mesmos

Pastebin de start.sh

http://pastebin.com/9QcWyqYF

Responder1

Você pode verificar a sintaxe da tela GNU para esta linha:

3 0 * * * /home/root/spaceengineers/start.sh /usr/bin/screen -x spaceengineers

Eu esperaria algo como:

3 0 * * * /usr/bin/screen -S spaceengineers -X stuff 'command with newline' 

No entanto, usar os -Xmeios screenespera que comandos de tela e não um script sejam executados.

Portanto, você precisa usar o screen stuffcomando conforme estePergunta SU

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

Atualizar

Experimente /bin/bashou onde quer que o Shell que você usa esteja localizado.

 3 0 * * * /bin/bash /home/root/spaceengineers/start.sh

Talvez adicione conteúdo start.shpara ajudar na depuração.

Você pode encontrar o shell com o whichcomando. Pode ser necessário sudoou ser root para descobrir.

Responder2

Este comando funcionou para mim, mas como um ou mais comandos em meu script exigiam sudo, tive que configurá-lo no cron do usuário root:

17 2 29 1 * /usr/bin/screen -dmS $MYSESSIONNAME /bin/bash $FULLPATHTOMYSHELLSCRIPT $SHELLSCRIPTARG1 $SHELLSCRIPTARG2 ...

A chave para fazer a tela funcionar (e não apenas fechar imediatamente quando invocada pelo cron) é o -dargumento, mas mprovavelmente também ajuda de alguma forma/casos.

Abaixo está o trecho relevante da screen --helpsaída

-dmS name Iniciar como daemon: sessão de tela em modo desanexado."

Responder3

@daily /usr/bin/screen -dms aquáticoscenery /ig.py && python ig.py

informação relacionada