Fórum Root.cz
Hlavní témata => Software => Téma založeno: scientific 19. 01. 2020, 11:37:29
-
Ahoj všem,
cronem spouštím skript, u kterého se poslední kousek skriptu neprovádí, ale když skript spustím ručně, tak se provede celý.
Skript spouští 3 aplikace, a nefungujicí konec skriptu má ty spuštěné aplikace na ploše seřadit pod sebe, aby byly všechny tři aplikace hezky vidět a nepřekrývali se. Při ručním spuštění funguje celý skript a při spuštění kronem funguje vše až na to poslední seřazení.
Jde o tento konec skriptu který se neprovádí při spouštění celého skriptu cronem:
echo fungující bla bal bal
echo níže už to nefunguje
sleep 30 # cekani na spusteni oken
wid1=`wmctrl -l | cut -d " " -f 1 | sed '1q;d'`
wid2=`wmctrl -l | cut -d " " -f 1 | sed '2q;d'`
wid3=`wmctrl -l | cut -d " " -f 1 | sed '3q;d'`
echo $wid1
echo $wid2
echo $wid3
wmctrl -i -r $wid1 -e 1,0,0,500,240
wmctrl -i -r $wid2 -e 1,0,270,500,240
wmctrl -i -r $wid3 -e 1,0,520,500,240
done
Jestli není potřeba zase něco jako export env nebo tak, nikdy jsem nepochopil jak to funguje.
Děkuji všem za tipy.
-
Nastav si v cronu mail pro reportovani chyb.
A nejspis to skonci na tom, ze neni nastaveny DISPLAY env. variable, ktery je nutny pro praci s necim pod X. Zkus se prihlasit z jineho pc skrze SSH a pusti si ten skript, uvidis co to dela, kdyz se to pousti.
A co ma byt to done na konci? Prijde mi ze ti chybi i zacatek skriptu.
-
Nedávno mi taky něco nešlo spustit a bylo to také absencí specifikace DISPLAY.
Pak si sem přijdu zase se stejným problémem, sem fakt máslo. Nedošlo mi, že se to týká i zrovna tohoto, když ta aplikace už běží, myslel sem si, že DISPLAY bude inherit.
Omlouvám se a děkuji ti.
-
Nastav si v cronu mail pro reportovani chyb.
A nejspis to skonci na tom, ze neni nastaveny DISPLAY env. variable, ktery je nutny pro praci s necim pod X. Zkus se prihlasit z jineho pc skrze SSH a pusti si ten skript, uvidis co to dela, kdyz se to pousti.
A co ma byt to done na konci? Prijde mi ze ti chybi i zacatek skriptu.
Na to se nemusí připojovat přes SSH, to si může zkusit takto:
unset DISPLAY ; wmctrl -l
nebo
unset DISPLAY ; ./ten-skript-co-normalne-jede-a-v-cronu-ne
-
Nedávno mi taky něco nešlo spustit a bylo to také absencí specifikace DISPLAY.
Pak si sem přijdu zase se stejným problémem, sem fakt máslo. Nedošlo mi, že se to týká i zrovna tohoto, když ta aplikace už běží, myslel sem si, že DISPLAY bude inherit.
Omlouvám se a děkuji ti.
Ano DISPLAY se dědí. Ale protože cron DISPLAY nastavený nemá, zdědí to takto i skript.
-
Jo takhle, chápu, stačilo tomu scriptu nastavit DISPLAY a tím pádem bych to nemusel nastavovat na jednotlivých řádkách skriptu.
0 0 * * * DISPLAY=:0 /path/to/script.sh > script.log
Děkuji za tip.
Je to tedy vyřešení, zapíšu si to za uši.
-
Ahoj všem,
cronem spouštím skript, u kterého se poslední kousek skriptu neprovádí, ale když skript spustím ručně, tak se provede celý.
Skript spouští 3 aplikace, a nefungujicí konec skriptu má ty spuštěné aplikace na ploše seřadit pod sebe, aby byly všechny tři aplikace hezky vidět a nepřekrývali se. Při ručním spuštění funguje celý skript a při spuštění kronem funguje vše až na to poslední seřazení.
Jde o tento konec skriptu který se neprovádí při spouštění celého skriptu cronem:
echo fungující bla bal bal
echo níže už to nefunguje
sleep 30 # cekani na spusteni oken
wid1=`wmctrl -l | cut -d " " -f 1 | sed '1q;d'`
wid2=`wmctrl -l | cut -d " " -f 1 | sed '2q;d'`
wid3=`wmctrl -l | cut -d " " -f 1 | sed '3q;d'`
echo $wid1
echo $wid2
echo $wid3
wmctrl -i -r $wid1 -e 1,0,0,500,240
wmctrl -i -r $wid2 -e 1,0,270,500,240
wmctrl -i -r $wid3 -e 1,0,520,500,240
done
Jestli není potřeba zase něco jako export env nebo tak, nikdy jsem nepochopil jak to funguje.
Děkuji všem za tipy.
Zdravím, už jsem to tady četl mockrát: “z cronu mi to nejede, v shellu ano.”
Dovolte mi to zobecnit: když jste v shellu, máte nějak definované prostředí, které je ideálně vyexportované děckám, jako třeba cestu k vykonatelným souborům (PATH) atd ( viz příkaz set ) a taky vstup a výstup. Je to dané nastavením v /etc/environment, /etc/profile , profile uživatele, no to je jedno, ale cron je implicitně nezná. Musíte ho skriptu v cronu nadefinovat. Když skript z cronu nefunguje , vždycky je to tím!
Apropos , uvádět příkazy bez cesty nebo s relativní cestou ve skriptu, natož v cronu, je koleda o (bezpečnostní) průser.