Fórum Root.cz
Hlavní témata => Server => Téma založeno: TerkaSoukupova95 16. 04. 2019, 11:32:37
-
Zdravím.. :)
Řeším takový zajímavý případ na serveru pro bratra - Minecraft server a nedaří se mi to..
mám /var/Minecraft/start.sh ve kterém mám:
# Minecraft start
if ! screen -list | grep -q "Minecraft Server"; then
echo "Starting Minecraft server..."
echo "Minecraft server started at: $(date)" >> minecraftServer.log
screen -dmS 'Minecraft Server' java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
echo "Server will be running after 5 seconds."
sleep 5
echo ""
echo ""
fi
echo "Server is running"
Pokud script spustím ručně, tedy ./start.sh tak vše naběhne parádně a funguje to. Ovšem někdy se stane, že se služba screen vypne nebo je tam ráno restart (cronem) a ráda bych, aby mi to cron zase zapínal.. Mám tedy nastavený, že každou minutu spouští ten start.sh, ve kterém je kontrola, jestli server jede nebo ne a když ne, tak se provede výše zmíněný řádek. Hodila jsem do outputu i echo, abych věděla, že se to spustilo.. Vše jede, jenom ta služba screen nechce nic dělat.
Nějaký nápad proč ruční zapnutí je ok, ale cron to ignoruje? Práva na soubor jsou "-rwxr-xr-x".
Děkuji za každou radu. Hezký den. :)
-
A co říká log? Chybové výstupy Cronu by se tam měly vypisovat. Osobně to tipuji na problém s cestou ke screen, zkus ho volat absolutně.
-
Chybu může vypsat ten program uvnitř screenu, pak to pro cron bude vypadat v pořádku. Dej za to spuštění té javy několikahodinový sleep.
Také, pokud je to systemd, bych pro jistotu nastavil KillUserProcesses=no.
-
A co říká log? Chybové výstupy Cronu by se tam měly vypisovat. Osobně to tipuji na problém s cestou ke screen, zkus ho volat absolutně.
JJ, pokud si to dobře pamatuju, tak byl většinou problém v tom, že cron má jinou PATH, než předpokládá uživatel, který ten záznam v cronu chce nastavit a zkouší to u sebe v terminálu a "tam to funguje dobře, ke všem sakrům!".
Viz (https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working) (odstavec Different environment).
-
Absolutní cesta, tedy /usr/bin/screen funguje stále jen na manuální sputění.
Několikahodinový sleep taky nepomáhá.
-
zkus jeste absolutni cestu k te jave
-
Pokud nebude fungovat screen, dá se ještě pouštět procesy pomocí nohup. Viz man nohup. (Nevím, jestli je to aktuální ještě v době systemd, třeba mě někdo opraví). V takovém případě by se existence běžícího serveru musela kontrolovat pomocí "ps". Je to starší metoda, minimalističtější, třeba bude fungovat.
-
No a na začátku toho skriptu máš něco jako toto?
#!/bin/bash
-
Ja viem ze to znie jak pitomost ale mas istotu ze mas ok zaznam v crontabe? Vidis v logu ze sa to cron vobec pokusa spustit? (daj si tam uplne na zaciatok este nejake echo).
Od toho by som sa odpichol, ako tu bolo spomenute casto byva potom problem v environment variables.
Ja som to zvycajne daval do crontabu napr. nejak takto:
*/5 * * * * /bin/bash -c ". ~/.bashrc; /cesta_ku_skriptu/blabla.sh"
-
Několikahodinový sleep taky nepomáhá.
Nevěřím, opravdu ten sleep spouštíš uvnitř screenu a ne jen v tom skriptu co spouštíš z cronu? Co se stane když javu nahradíš a) něčím jiným existujícím, b) něčím neexistujícím?
Chodí ti z cronu maily?
-
Pro Debian like OS
dpkg-reconfigure dash
Use dash as the default system shell (/bin/sh)? <- no
Dash shell casto pusobi "problemy"
-
Chodí ti z cronu maily?
pochybuju, protoze jinak by kazdou minutu dorazel mail od cronu "Server is running" :-)
osobne mam maily od cronu(resp. roota) zprovoznene, ale skripty poustene z cronu mam pripravene tak ze detekujou zda je pousti cron (pak zobrazujou(=posilaj do mailu) jen error text) nebo zda je pousti rucne uzivatel (pak zobrazujou i info text)
-
Absolutní cesta, tedy /usr/bin/screen funguje stále jen na manuální sputění.
Několikahodinový sleep taky nepomáhá.
hladal by som chybu tu. Pride mi to , ze to moze fungovat len vtedy, ak to spustas z adresara, kde sa nachadza minecraft_server.jar
java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
skusala si dat , plnu cestu , k jave a aj k minecract_server.jar ?
-
Já osobně tyhle věci řeším následovně, script spouštím cronem každou minutu.
#!/bin/sh
ME=`basename "$0"`;
LCK="/run/${ME}.lck";
exec 3>$LCK;
if flock -n -x 3; then
while [ true ]; do
echo "Minecraft server started at: $(date)" >> minecraftServer.log
/usr/bin/java -Xmx1024M -Xms1024M -jar /fullpath/minecraft_server.jar nogui
done
fi
-
#!/bin/bash
a absolutní cesta k *.jar pomohlo. Děkuji moc! ♥
Edit: Tak ne, nějaká obluda se zatoulala..
Edit2: screen -list
sice ukáže, že to běží, ale asi tak 3 vteřiny, pak se to zase vypne.. ani sleep na 24h nepomáhá. :)
-
Chodí ti z cronu maily?
pochybuju, protoze jinak by kazdou minutu dorazel mail od cronu "Server is running" :-)
To byla návodná otázka, protože když si to rozchodí, mohla by mu přijít nějaký chyba, ze které půjde zjistit, co s tím je.
Já osobně tyhle věci řeším následovně, script spouštím cronem každou minutu.
Screen se hodí pokud ten server má konzoli (nevím jestli je to případ Minecraftu), na kterou se dá připojit a něco dělat. Já takhle provozuju třeba interaktivního instant messaging klienta.
-
Screen se hodí pokud ten server má konzoli (nevím jestli je to případ Minecraftu) ...
je, ale třeba to není potřeba?
jinak nechápu, co za cron zabíjí jednou denně screen? mi screen běží týdny a nic ho nikdy nezabíjí
nevysype se náhodou jen ten minecraft server? pak by se to testovalo třeba pgrep java || /cesta/java -Xmx1024M -Xms1024M -jar /cesta/minecraft_server.jar nogui
-
jinak nechápu, co za cron zabíjí jednou denně screen? mi screen běží týdny a nic ho nikdy nezabíjí
Já to pochopil tak, že ten minecraft potřebuje jednou za den restartovat (třeba memory leaky).
-
aha, to by mohlo být
no stejně by bylo asi lepší zabít javu, screen nechat a pro běh testovat přímo tu javu třebas tím pgrep
-
Zkus spouštět Minecraft ve skriptu takto:
/usr/bin/screen -d -m sh -c "/usr/bin/java -Xmx768M -Xms768M -jar /Minecraft/minecraft_server.1.8.1.jar nogui"
Samozřejmě uprav absolutní cesty /usr/bin/java a /Minecraft/minecraft_server.1.8.1.jar podle skutečnosti.
Taky můžeš zkusit nahradit screen programem tmux, který dělá to samé:
https://gist.github.com/Jofkos/86a4936c91999082d6a7 (https://gist.github.com/Jofkos/86a4936c91999082d6a7)
-
/usr/bin/screen -d -m sh -c "/usr/bin/java -Xmx768M -Xms768M -jar /Minecraft/minecraft_server.1.8.1.jar nogui"
Ani takto ne. Neměl by tam být ten parametr -dmS, aby se to spustilo jako démon? :)
Stále to reaguje je aktivní jen v tu chvíli, co se to spuští.. Spustí se terminál toho screenu, načte se mapa a ve chvíli, kdy už to nic nedělá nenačítá se to jakoby vypne.
A pro ostatní, aby bylo jasno, proč to řeším.. Občas se tam udělají memory leaky a tak je potřeba to jednou za den restartovat. Takže to cronem řeším tak, že se to asi o půl pátý ráno vypne a cron by to zase měl nahodit zpět. A pokud by došlo k pádu v průběhu dne (přetížení, chyba, ...) a ten screen se vypnul, aby to ten cron (co se spouští každou minutu) zase nahodil. :)
-
Vyřešeno!!!
Zjistila jsem problém, že ten Minecraft server vyžaduje eula=true.. To jsem měla, ale když jsem spouštěla přes cron, tak ten soubor s eula to neznalo, protože byl relativně umístěn.. Stačilo na začátku dát něco jako:
cd /var/Minecraft_server/
Protože v tomto umístění se ten soubor vyskytoval...
A problém vyřešen.. :)
Děkuji všem za čas a nápady. :)