[Problema] Avvio automatico dei server Centos 6

Salve,
Vorrei sapere come utilizzare screen in modo che all'avvio della macchina (anche reboot) i vari server si avviino.
Ho visto che si possono utilizzare degli script, ma nel caso in cui gli utilizzassi e poi mi collegassi alla macchina vedrei le console?
Qualcuno potrebbe aiutarmi?
Grazie Smile
@pietro98th
Non so se ho capito bene quello che intendi, speriamo xD.
Mettiamo caso che tu abbia 3 server nelle seguenti directory:

/home/minecraft/1
/home/minecraft/2
/home/minecraft/3


Secondo me il modo più semplice per fare quello che tu chiedi è quello di mettere i comandi di avvio di ogni server minecraft all'interno del file rc.local. Quello che devi fare è editare il file /etc/rc.local con nano o vi (in root), e inserire i comandi di avvio di minecraft (segue un esempio):

Codice:
screen -dmS minecraft1 java -Xms512M -Xmx1024M -jar /home/minecraft/1/spigot.jar nogui
screen -dmS minecraft2 java -Xms512M -Xmx1024M -jar /home/minecraft/2/spigot.jar nogui
screen -dmS minecraft3 java -Xms512M -Xmx1024M -jar /home/minecraft/3/spigot.jar nogui

ovviamente personalizzandoti i percorsi e i nomi dei file come sono sul tuo server.
Dopodichè dai i permessi di esecuzione al file rc.local

Codice:
chmod +x /etc/rc.local

ed hai terminato. Dal prossimo avvio, se i comandi che hai inserito sono corretti, i 3 server minecraft si avvieranno in automatico.
Per recuperare la console di ogni server basta dare uno "screen -r minecraft1", o minecraft2, o minecraft3 a seconda della console che vuoi aprire.

Sciau Big Grin (Modificato 07/06/2015, 00:51 da bendevelop.)
Allora, adesso non ho sottomano un computer, stasera ti spiego meglio (con gli script giusti) come configurarlo.

@bendevelop il problema di quello che hai fatto te è che i server vengono avviati da root, cosa sconsigliatissima. Inoltre, essendo avviati da root, utenti non privilegiati non potranno accedervi, se non si configura il multiuser. Poi, non ti sposti nella cartella del server. In questo modo tutti i file si ritroveranno non-so-bene-dove (penso in /root), mischiandosi fra di loro.
Infine, SysVInit è vecchio, ed in CentOS 6 è stato affiancato da upstart. Poi, in CentOS 7 upstart è stato rimpiazzato da systemd.
Dato che adesso ha CentOS 6, non è meglio dargli script di upstart che sono anche più flessibili?
Se sai farlo con upstart sì, ben venga Smile
per quanto riguarda lo user, puoi dare i comandi con su nomeutente -c 'screen -dmS minecraft1 java -Xms512M -Xmx1024M -jar /home/minecraft/1/spigot.jar nogui'

sempre nell'rc.local.
comunque nel caso se hai bisogno puoi aggiungermi su skype: benedictdesign
Dopo ti aggiungo @bendevelop
Allora, eccomi qua, scusa per il delay.
Il job di upstart è questo, posizionalo in /etc/init/nomeservizio.conf:

Codice:
description "Minecraft server launcher"
author "Pietro Albini <pietro@pietroalbini.io>"

start on net-device-up and filesystem
stop on runlevel[7]

respawn

setuid minecraft
setgid minecraft
chdir /srv/minecraft/nomeserver

exec /srv/minecraft/nomeserver/wrapper.py

Ricordati di aggiustare il chdir e l'exec, puntando quest'ultimo allo script sotto.
Il servizio sarà in funzione finché lo script wrapper.py sarà in funzione. Poi, il wrapper che ho creato è questo:

Codice:
#!/usr/bin/python
# Wrapper to allow managing Minecraft servers with upstart
# Copyright (C) 2014 Pietro Albini <pietro@pietroalbini.io>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import signal
import subprocess
import time

# The command which will be executed into the screen
# Usually the server starting script
COMMAND = "/srv/minecraft/nomeserver/start.sh"

# The command which will be issued when the server must be stopped
STOP_COMMAND = "stop Il server si sta riavviando"

# In seconds. After the stop command was issued, sleep for that number of seconds.
# If the server wasn't stopped yet, kill the screen
CHECK_STOP_AFTER = 5

# In seconds. Check if the server is death every that number of seconds
TICK = 1

# The screen name
SCREEN_NAME = "minecraft"

MULTIUSER_ENABLED = True
MULTIUSER_USERS = ["utente1", "utente2"]

def is_alive():
    result = subprocess.call('screen -list | grep -q "'+SCREEN_NAME+'"', shell=True) # Check if the screen is alive
    return True if result == 0 else False

def start():
    subprocess.call('screen -dmS '+SCREEN_NAME+' "'+COMMAND+'"', shell=True) # Start the screen
    if MULTIUSER_ENABLED:
        subprocess.call('screen -S '+SCREEN_NAME+' -X multiuser on', shell=True) # Enable multiuser
        for user in MULTIUSER_USERS:
            subprocess.call('screen -S '+SCREEN_NAME+' -X acladd '+user, shell=True) # Add the user to acl
 
def stop():
    subprocess.call('screen -S '+SCREEN_NAME+' -X stuff "\n'+STOP_COMMAND+"\n"+'"', shell=True) # Try to stop the server
    # Sleep for tot seconds, and after that if the screen is alive kill it
    time.sleep(CHECK_STOP_AFTER)
    if is_alive():
        subprocess.call('screen -S '+SCREEN_NAME+' -X quit', shell=True)
 
def on_stop(signum, frame):
    stop() # Stop the server
    sys.exit(0) # Exit

start()
signal.signal(signal.SIGTERM, on_stop)
 
while True:
    time.sleep(TICK)
    if not is_alive():
        sys.exit(1)

Lo script dovrebbe funzionare su Python 2.6 (quello disponibile in CentOS 6), ma non avendone un'installazione non lo so di preciso. Se ci sono problemi chiedi.
Nello script, modifica le variabili in alto, quindi lo script per avviare il server (start.sh), il comando di spegnimento, il numero di secondi che di solito il server impiega a spegnersi (abbonda pure, quando finiscono il server viene killato brutalmente), TICK lascialo stare, il nome dello screen che vuoi creare e se vuoi il multiuser (True o False), cioé se più utenti potranno accedere a quello screen. Se lo abiliti, specifica nella lista sotto i nomi degli utenti che potranno accedere allo screen.

Lo start.sh dovrà essere il classico cd+java -jar. Ricordati di non mettere più server nello stesso servizio.

Dopo aver messo lo script di upstart e il wrapper, puoi gestire il server come un servizio normale, quindi:
Codice:
service minecraft start
service minecraft stop
service minecraft restart
# oppure: -- i comandi sotto non funzioneranno con systemd
start minecraft
stop minecraft
restart minecraft

Perché tutto questo casino quando bastava fare come ha detto @bendevelop? Semplice, perché così upstart riavvierà in automatico anche il server quando crasherà di sua sponte :) (Modificato 21/07/2015, 21:05 da pietro98th.)
1 utente apprezza questo post
Discussioni simili
Risposta di Maxetto
13/12/2018, 22:49
Risposta di Maxetto
08/12/2018, 15:05
Risposta di EdwardTheKnight
31/08/2018, 11:53
Risposta di _FabioTNT
30/07/2018, 12:18
Risposta di Maxetto
01/05/2018, 15:51

Utente(i) che stanno guardando questa discussione: 1 Ospite(i)