Jak spouštět bash script CRON

Jak spouštět bash script CRON
« kdy: 02. 01. 2020, 09:43:13 »
Ahoj všem,

prosím o radu, jak pomocí CRON automaticky spouštět BASH skript. Na internetu je to na každé stránce jinak.

Co je z toho správně a jak byste úlohu konfigurovali vy?:
* * * * * /root/path/to/script.sh
* * * * * ./root/path/to/script.sh
* * * * * cd /root/path/to/ && ./script.sh
* * * * * . cd /root/path/to/; bash -lc ./script.sh
* * * * * . /root/path/to/; bash -lc ./script.sh
* * * * * cd /root/path/to/; bash -l -c ./script.sh
* * * * * . /home/username/.bashrc && yourcommand all of your args

Někdy mi přišlo, že se skript spustil, ale nevykonal se celý, nějaké jeho části byly ignorovány. Za to možná může prostředí env. Mělo by se to údajně řešit něčím jako definováním ENV (přímo do crontabu nebo do jednotlivých skriptů) nebo exportováním PATH a definoním SHELL.

Něco jako:
SHELL=/bin/bash
ENV=
EXPORT_PATH=

Jak to má být? Hádám, že env se dá nějak vypsat přes příkaz "env" a path přes "pwd", ale nevím kde jakou cestu si nechat vypsat a kam ji dát. Jestli env proměnnou přidat do crontabu. Mám v tom asi dost bordel, ale nemám v plánu být serveradmin, tak mi to snad odpustíte.

Děkuji všem za vysvětlení a rady.
« Poslední změna: 02. 01. 2020, 09:45:38 od scientific »


Esef_cze

  • *
  • 1
  • System Management Specialist
    • Zobrazit profil
    • E-mail
Re:Jak spouštět bash script CRON
« Odpověď #1 kdy: 02. 01. 2020, 10:07:32 »
staci full path od /, tzn

/path/to/script/script.sh


s teckou na zacatku bych to daval kdybych to poustel z aktualni slozky, tzn

./script.sh
High focus on app management, virtualization, monitoring. OS =>Linux, AIX, Windows Server...

Re:Jak spouštět bash script CRON
« Odpověď #2 kdy: 02. 01. 2020, 13:23:33 »
Script by neměl být závislý na prostředí, nebo by si ho měl nastavit sám.
Pokud máte závislost na prostředí, je ten script na vodě.
Fixujte toto.

Jinak správně je ten první zápis.
Pro uživatelské crony lze využít variantu, kterou nezmiňujete:

* * * * * ~/path/to/script.sh

Re:Jak spouštět bash script CRON
« Odpověď #3 kdy: 02. 01. 2020, 17:59:40 »
Zkoušel jsem oboje, ani jedno nefunguje:
* * * * * /root/path/to/script.sh # log píše: "Error: no DISPLAY enviroment variable specified"
* * * * * ~/root/path/to/script.sh # to fungovat nemůže, tím bych vytvořil /root/root/path/to/script.sh

Off-topic:
Závyslot na prostředí bych tam mít neměl, ale kdyby ano, jak by se to dalo řešit?
Jako nesystémový uživatel to nespouštím. Jistě by to bylo lepší, ale v tomto případě mi je fuk, že to spouštím rootem. Kdyby mi to ale fuk nebylo, jak by se to spouštělo? Asi by se před ten příkaz přidalo pouze sudo nebo "su -u"?

Děkuji za vysvětlení.

Re:Jak spouštět bash script CRON
« Odpověď #4 kdy: 02. 01. 2020, 18:22:43 »
Co máte v tom scriptu? Tohle není problém volání cronu, ale to, že něco uvnitř vyžaduje zobrazovat na DISPLAY.


k3dAR

  • *****
  • 2 438
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Jak spouštět bash script CRON
« Odpověď #5 kdy: 02. 01. 2020, 19:06:54 »
Zkoušel jsem oboje, ani jedno nefunguje:
* * * * * /root/path/to/script.sh # log píše: "Error: no DISPLAY enviroment variable specified"
* * * * * ~/root/path/to/script.sh # to fungovat nemůže, tím bych vytvořil /root/root/path/to/script.sh
DISPLAY znamena ze v skriptu poustis nejakou aplikace co chce pristup na Xka, coz ve vetsine pripadu je spatne reseni, to bych spis udelal ze se pri prihlaseni uzivatele pusti pomocnej skript co v nejakem casovem intervalu pousti dokola ten tvuj skript, bylo by to tedy postene pod uzivatelem

~ je zastupnej znak pro $HOME, v pripade root by slo o /root, tzn ~/adresar_co_ma_root_v_home/skript, nicmene tohle je vhodne JEN kdyz bys nepoustel systemovej cron, ale uzivatelskej, opet prihlaseneho uzivatele, coz by pravdepodobne nebyl root ale tvuj...


[...] Kdyby mi to ale fuk nebylo, jak by se to spouštělo? Asi by se před ten příkaz přidalo pouze sudo nebo "su -u"?
"sudo neco" protoze ty bys chtel povysit aktualniho uziavatele "na" roota, nikoliv pod rootem pustit prikaz jako jinej uzivatel (k tomu by bylo su), kazdopadne pri pouziti sudo bys tomu co bys tim poustel musel pres visudo povolit NOPASSWD aby povyseni (toho konkretniho prikazu) nevyzadovalo rucni zadani hesla....

takze proste napis co presne je tvojim cilem, nebo jeste lepe, posli ten skript kompletne co chces poustet...

Re:Jak spouštět bash script CRON
« Odpověď #6 kdy: 02. 01. 2020, 19:22:15 »
Děkuji moc, už mi to došlo, že je potřeba specifikovat DISPLAY, takže jsem přidal něco jako "DISPLAY=:0".

Funguj mi to.

Děkuji všem za pomoc a vysvětlení.

Vyřešeno.

Re:Jak spouštět bash script CRON
« Odpověď #7 kdy: 02. 01. 2020, 19:23:58 »
Ehm, a co bude dělat ten cron, když žádný X nebude spuštěný?

Re:Jak spouštět bash script CRON
« Odpověď #8 kdy: 02. 01. 2020, 19:28:35 »
Ten cron spouští jednu okenní aplikaci, nevím co je to Xko, ale nejspíš nějaká instance GUI a to si nejspíš ta aplikace už řeší sama.

Skutečně mi to funguje a je to tak, jak jsem chtěl, děkuji.

Re:Jak spouštět bash script CRON
« Odpověď #9 kdy: 02. 01. 2020, 19:33:51 »
Ten cron spouští jednu okenní aplikaci, nevím co je to Xko

Sirky a cron dětem do ruky nepatří.
No potěš Vás pánbu a hezký den!