Cron → shell → screen nefunguje

Cron → shell → screen nefunguje
« kdy: 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. :)
« Poslední změna: 16. 04. 2019, 11:34:54 od TerkaSoukupova95 »


reddy

Re:Cron → shell → screen nefunguje
« Odpověď #1 kdy: 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ě.

_Jenda

  • *****
  • 1 591
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Cron → shell → screen nefunguje
« Odpověď #2 kdy: 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.

Re:Cron → shell → screen nefunguje
« Odpověď #3 kdy: 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 (odstavec Different environment).

Re:Cron → shell → screen nefunguje
« Odpověď #4 kdy: 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á.


czipis

  • ***
  • 233
    • Zobrazit profil
    • E-mail
Re:Cron → shell → screen nefunguje
« Odpověď #5 kdy: 16. 04. 2019, 14:01:44 »
zkus jeste absolutni cestu k te jave

Re:Cron → shell → screen nefunguje
« Odpověď #6 kdy: 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.

Re:Cron → shell → screen nefunguje
« Odpověď #7 kdy: 16. 04. 2019, 17:51:07 »
No a na začátku toho skriptu máš něco jako toto?
#!/bin/bash

k0k0t

Re:Cron → shell → screen nefunguje
« Odpověď #8 kdy: 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"

_Jenda

  • *****
  • 1 591
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Cron → shell → screen nefunguje
« Odpověď #9 kdy: 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?

Vilith

  • *****
  • 662
    • Zobrazit profil
Re:Cron → shell → screen nefunguje
« Odpověď #10 kdy: 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"

k3dAR

  • *****
  • 2 883
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Cron → shell → screen nefunguje
« Odpověď #11 kdy: 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)

Re:Cron → shell → screen nefunguje
« Odpověď #12 kdy: 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 ?

reddy

Re:Cron → shell → screen nefunguje
« Odpověď #13 kdy: 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

Re:Cron → shell → screen nefunguje]
« Odpověď #14 kdy: 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á. :)
« Poslední změna: 17. 04. 2019, 13:26:27 od TerkaSoukupova95 »