Moin,
die Verwaltung eines Arma Servers unter Linux ist etwas spezieller als auf Windows, und manche Sachen lassen sich leider auch nicht so einfach lösen. Bestes Beispiel: Automatische Restarts mit den entsprechenden Ankündigungen.
Was auf Windows mit BEC mit ein paar Handgriffen erledigt ist, ist unter Linux nur etwas umständlich möglich.
Deshalb zeige ich euch, wie Ihr recht einfach Restartankündigungen mit anschließendem Restart unter Linux realisieren könnt.
Was wird benötigt:
- Arma3 Server mit RCON Console
- Shell Zugriff auf Linux Server
- CURL Erweiterung
- Webspace mit PHP 5.4
Was genau machen wir?
Wir erstellen ein PHP Script, welches eine RCON Console simuliert.
Dieses PHP Script führt dann Befehle über RCON auf dem Server aus.
Danach legen wir in Linux automatische Aufrufe auf die PHP Datei an.
Zuletzt erstellen wir ein Shell Script mit dem der Server automatisch neustartet.
1. Schritt: PHP Script anlegen
Ladet folgendes GIT in ein beliebiges Verzeichnis in eurem Webspace. Als Beispiel verwende ich den Ordner rcon.
http://github.com/schaeferfelix/arma-rcon-class-php
Erstellt im selben Verzeichnis eine Datei mit dem Namen rcon.php und fügt folgendes ein:
<?php
/*
* Author: Lucas Bareiss
* File: rcon.php
* License: https://creativecommons.org/licenses/by-sa/4.0/
*/
if(!isset($_GET['access']) || $_GET['access']!="changeme") { //Ersetzte changeme durch eine Sichere Zeichenfolge
header("HTTP/1.0 404 Not Found");
die();
}
require_once("./arc.php"); //Einbinden der PHP RCON Klasse
use \Nizarii\ARC; //Einbinden der PHP RCON Klasse
$array = "";
try {
$rcon = new ARC('Deine IP', 'Dein PW', Dein PORT); //Setze hier die Daten deines Servers ein
switch($_GET['todo']){ //Frage ab, was zu tun ist
case "15min":
$rcon->sayGlobal('Der Server wird in 15 Minuten neugestartet');
break;
case "10min":
$rcon->sayGlobal('Der Server wird in 10 Minuten neugestartet');
break;
case "5min":
$rcon->sayGlobal('Der Server wird in 5 Minuten neugestartet');
break;
case "2min":
$rcon->sayGlobal('Der Server wird in 2 Minuten neugestartet');
break;
case "1min":
$rcon->sayGlobal('Der Server wird in 1 Minute neugestartet');
break;
case "restart":
$array = $rcon->getPlayersArray();
foreach($array AS $player) {
$rcon->kickPlayer($player[0], 'Serverrestart');
}
$rcon->command("#shutdown");
break;
}
$rcon->disconnect();
} catch (Exception $e) {
}
?>
Alles anzeigen
Das Verzeichnis sollte nun ungefähr so aussehen:
Aufgerufen wird euer Script wie folgt:
http://deinedomain.tdl/ordner/rcon.ph…me&todo=restart
Was bewirkt das Script:
Zuerst wird geprüft, ob der Access Token richtig angegeben wurde. Dies ist dafür gedacht, dass andere Leute, falls sie durch Zufall auf die Datei stoßen, keine Befehle ausführen können.
Wird der Token korrekt angegeben, so wird abgefragt, was ihr genau machen wollt:
15min -> Zeigt die Info an, dass der Server in 15 Minuten neu gestartet wird
10min -> Zeigt die Info an, dass der Server in 10 Minuten neu gestartet wird
5min, 2min, 1min -> Kommst du selbst drauf
restart -> Kickt alle vorhandenen Spieler mit der Meldung "Serverrestart" und stoppt den Server mit dem RCON Befehl "shutdown"
Fühlt euch frei, das Script an eure Gegebenheiten anzupassen.
2. Schritt: Einstellen der Crontabs
Cron ist ein Dienst auf Linux, welcher zu gegebene Zeiten eine aktion ausführt.
Ausführliche Infos dazu gibt es http://wiki.ubuntuusers.de/Cron/
Logt euch per SSH auf euren Server ein und gebt dann folgendes ein:
crontab -e
In der nun geöffneten Datei fügt ihr folgendes ein. Wichtig ist, dass am Ende der Datei eine Leerzeile steht!
0 0,6,12,18 * * * curl -k "http://deinedomain.tdl/ordner/rcon.php?access=changeme&todo=restart"
59 23,5,11,17 * * * curl -k "http://deinedomain.tdl/ordner/rcon.php?access=changeme&todo=1min"
58 23,5,11,17 * * * curl -k "http://deinedomain.tdl/ordner/rcon.php?access=changeme&todo=2min"
55 23,5,11,17 * * * curl -k "http://deinedomain.tdl/ordner/rcon.php?access=changeme&todo=5min"
50 23,5,11,17 * * * curl -k "http://deinedomain.tdl/ordner/rcon.php?access=changeme&todo=10min"
45 23,5,11,17 * * * curl -k "http://deinedomain.tdl/ordner/rcon.php?access=changeme&todo=15min"
Was wird gemacht?
Die Zahlen legen fest, wann genau der Befehl ausgeführt werden soll.
Die erste Zahl legt die Minute, die zweite Zahl die Stunde fest.
Die * stehen für Tag, Monat und Wochentag. Der * bedeutet soviel wie immer.
Die Kommas trennen gleiche Werte ab.
Curl ist ein Linux Befehl und ruft eine Webseite auf.
Um 00:00, 06:00, 12:00 und 18:00 wird der Befehl Restart gesendet,
Um 23:59, 05:59, 11:59 und 17:59 wird der Befehl 1min gesendet, etc.
3. Schritt: Einrichten des Autostarts
Der Server wird nun zwar gestoppt, aber nicht wieder neu gestartet.
Erstellt aus dem Grund im Arma Verzeichnis eine Datei mit dem Namen start.sh und schreibt folgendes rein:
#!/bin/bash
while :
do
echo "Server wird in 5 Sekunden gestartet"
sleep 5
HIER EUREN STARTBEFEHL EINGEBEN
done
Ersetz
HIER EUREN STARTBEFEHL EINGEBEN
mit eurem Startbefehl.
Das macht das Script:
Wenn das Script gestartet wird, wartet es 5 Sekunden, und startet dann den Server.
Dann wartet es solange, bis der Serverprozess nicht mehr läuft, und dann wiederholt sich das ganze.
Am besten in Verbindung mit Screen oder Tmux ausführen, aber das ist ein anderes Thema.
Fertig, euer Server wird nun auch planmäßig unter Linux runtergefahren und startet sich automatisch neu.
Viel Spaß!