Criar uma sessão de tela com um script bash usando contab


8

Quero que um arquivo .jar seja executado toda vez que o servidor inicializar (estamos usando um VPS) e, por isso, editei o crontab usando crontab -ee adicionando @reboot bash /home/bash/startserver.sh. Mas nem cheguei ao ponto em que o script funciona.

Aqui está o meu script:

#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar

A razão pela qual preciso usar screené que, quando inicio o bukkit.jar, ele entra em um console onde posso inserir mais comandos para esse programa (tenho certeza de que você está familiarizado com o Minecraft e seus servidores neste site, embora , haha), mas eu preciso ser capaz de executar outros comandos como root e para outros programas enquanto estiver em execução, e até fechar minha sessão PuTTY.

O único problema é que, quando esse script é executado, ele cria uma sessão de tela, mas seu ID não está listado screen -ls, pois o ID está em branco. Em vez disso, tenho que /run/screen/S-rootprocurar o ID e usar o típico screen -X -S $name quitnele.

Talvez isso não seja possível, ou talvez haja uma maneira mais simples de fazer isso (eu adoraria mais simples), mas não consigo descobrir por que isso não está funcionando. E se isso for possível, é possível voltar a participar de uma sessão screen -S bukkitao executar um script bash? (Várias perguntas, eu acho, mas muito obrigado pela ajuda! (Parênteses))

Respostas:


15

Inicie a tela no modo desanexado e faça com que ele execute seu comando dentro dela:

screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'

Você pode criar um script dedicado bukkit.sh:

#!/bin/bash -e
cd ~/server
java -jar bukkit.jar

Para que, se o script se tornar mais complexo, você não precise escrever uma linha longa screene, assim, o screencomando possa permanecer o mesmo, simplesmente:

screen -d -m -S bukkit path/to/bukkit.sh

1
Tentei fazer as duas opções, aquela com um arquivo mais longo e depois a com dois arquivos separados, mas agora a sessão da tela não está sendo criada. Eu tentei executar os comandos diretamente da linha de comando, mas que não quer trabalhar ..: /
Jacob Larson

Você recebe uma mensagem de erro ou algo assim? Primeiro, obtenha o bukkit.shscript trabalhando na linha de comando. Em seguida, verifique se screen -S bukkit path/to/bukkit.shfunciona. Em seguida, verifique se screen -d -m -S bukkit path/to/bukkit.shfunciona. Por fim, configure o cron. Tente a coisa mais simples primeiro e faça pequenos passos para entender quais são as etapas. Diga-me isso e a mensagem de erro que você recebe se precisar de ajuda.
Janos

1

Você deve update-rc.d, da seguinte forma, ativar o serviço na inicialização:

# update-rc.d cron defaults

@JacobLarson Você é bem-vindo .. É melhor marca como resposta e upvote se isso ajuda você
Maythux
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.