Část skriptu je ignorována

Část skriptu je ignorována
« kdy: 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

Kód: [Vybrat]
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.


RDa

  • *****
  • 2 622
    • Zobrazit profil
    • E-mail
Re:Část skriptu je ignorována
« Odpověď #1 kdy: 19. 01. 2020, 12:08:21 »
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.

Re:Část skriptu je ignorována
« Odpověď #2 kdy: 19. 01. 2020, 13:52:45 »
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.

ByCzech

  • *****
  • 1 861
    • Zobrazit profil
    • E-mail
Re:Část skriptu je ignorována
« Odpověď #3 kdy: 19. 01. 2020, 13:53:31 »
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:

Kód: [Vybrat]
unset DISPLAY ; wmctrl -l
nebo

Kód: [Vybrat]
unset DISPLAY ; ./ten-skript-co-normalne-jede-a-v-cronu-ne

ByCzech

  • *****
  • 1 861
    • Zobrazit profil
    • E-mail
Re:Část skriptu je ignorována
« Odpověď #4 kdy: 19. 01. 2020, 13:55:17 »
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.


Re:Část skriptu je ignorována
« Odpověď #5 kdy: 19. 01. 2020, 14:24:50 »
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.

Kód: [Vybrat]
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.

FKoudelka

Re:Část skriptu je ignorována
« Odpověď #6 kdy: 19. 01. 2020, 22:55:00 »
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

Kód: [Vybrat]
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.
« Poslední změna: 19. 01. 2020, 23:04:01 od FKoudelka »