Fórum Root.cz

Hlavní témata => Server => Téma založeno: TerkaSoukupova95 16. 04. 2019, 11:32:37

Název: Cron → shell → screen nefunguje
Přispěvatel: 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:
Citace
# 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. :)
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: reddy 16. 04. 2019, 11:43:11
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ě.
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: _Jenda 16. 04. 2019, 13:21:00
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.
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: hawran diskuse 16. 04. 2019, 13:29:04
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).
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: TerkaSoukupova95 16. 04. 2019, 13:35:01
Absolutní cesta, tedy /usr/bin/screen funguje stále jen na manuální sputění.

Několikahodinový sleep taky nepomáhá.
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: czipis 16. 04. 2019, 14:01:44
zkus jeste absolutni cestu k te jave
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: Daniel Novotný 16. 04. 2019, 16:48:37
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.
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: starejkarlik 16. 04. 2019, 17:51:07
No a na začátku toho skriptu máš něco jako toto?
#!/bin/bash
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: k0k0t 16. 04. 2019, 18:09:59
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ázev: Re:Cron → shell → screen nefunguje
Přispěvatel: _Jenda 16. 04. 2019, 23:28:24
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?
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: Vilith 17. 04. 2019, 00:02:21
Pro Debian like OS

Kód: [Vybrat]
dpkg-reconfigure dash
Use dash as the default system shell (/bin/sh)? <- no

Dash shell casto pusobi "problemy"
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: k3dAR 17. 04. 2019, 01:03:44
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)
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: mslebodnik 17. 04. 2019, 08:37:41
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 ?
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: reddy 17. 04. 2019, 13:02:45
Já osobně tyhle věci řeším následovně, script spouštím cronem každou minutu.

Kód: [Vybrat]
#!/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
Název: Re:Cron → shell → screen nefunguje]
Přispěvatel: TerkaSoukupova95 17. 04. 2019, 13:20:10
#!/bin/bash
a absolutní cesta k *.jar pomohlo. Děkuji moc! ♥

Edit: Tak ne, nějaká obluda se zatoulala..
Edit2:
Citace
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á. :)
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: _Jenda 17. 04. 2019, 18:47:52
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.
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: Jan Fikar 17. 04. 2019, 19:25:49
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
Kód: [Vybrat]
pgrep java || /cesta/java -Xmx1024M -Xms1024M -jar /cesta/minecraft_server.jar nogui
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: _Jenda 17. 04. 2019, 19:27:34
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).
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: Jan Fikar 17. 04. 2019, 19:33:47
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
Název: Re:Cron → shell → screen nefunguje
Přispěvatel: starejkarlik 17. 04. 2019, 20:29:54
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)


Název: Re:Cron → shell → screen nefunguje
Přispěvatel: TerkaSoukupova95 23. 04. 2019, 13:37:50
/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. :)
Název: Re:Cron → shell → screen nefunguje [Vyřešeno]
Přispěvatel: TerkaSoukupova95 23. 04. 2019, 14:38:15
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. :)