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/log
i 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
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 -X
meios screen
espera que comandos de tela e não um script sejam executados.
Portanto, você precisa usar o screen
stuff
comando conforme estePergunta SU
screen -S sessionname -X stuff 'command'`echo -ne '\015'`
Atualizar
Experimente /bin/bash
ou onde quer que o Shell que você usa esteja localizado.
3 0 * * * /bin/bash /home/root/spaceengineers/start.sh
Talvez adicione conteúdo start.sh
para ajudar na depuração.
Você pode encontrar o shell com o which
comando. Pode ser necessário sudo
ou 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 -d
argumento, mas m
provavelmente também ajuda de alguma forma/casos.
Abaixo está o trecho relevante da screen --help
saí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