Crie uma sessão Screen com um script bash usando contab

5

Eu quero que um arquivo .jar seja executado toda vez que o servidor for inicializado (estamos usando um VPS) e, por isso, editei crontab usando crontab -e e, em seguida, adicionando @reboot bash /home/bash/startserver.sh . Mas eu nem cheguei ao ponto de o script funcionar.

Aqui está meu script:

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

A razão pela qual eu preciso usar screen é porque quando eu inicio o bukkit.jar, ele entra em um console onde eu posso inserir mais comandos para esse programa (tenho certeza que todos vocês estão familiarizados com o Minecraft e seu servidores neste site, haha), mas eu preciso ser capaz de fazer outros comandos como root e para outros programas enquanto ele estiver rodando, e até mesmo 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 é listado em screen -ls , pois o ID está em branco. Em vez disso, tenho que ir para /run/screen/S-root para encontrar o ID e, em seguida, usar o típico screen -X -S $name quit nele.

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

    
por Jacob Larson 03.03.2014 / 06:52

2 respostas

11

Inicie a tela no modo desanexado e execute seu comando dentro dela:

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

Você pode querer 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 para screen e, assim, o comando screen poderá permanecer o mesmo, simplesmente:

screen -d -m -S bukkit path/to/bukkit.sh
    
por janos 03.03.2014 / 07:24
1

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

# update-rc.d cron defaults
    
por Maythux 03.03.2014 / 07:53