Fórum Root.cz

Hlavní témata => Software => Téma založeno: Glerin 19. 07. 2021, 14:57:46

Název: Automatické restartování scriptu po nějakém čase
Přispěvatel: Glerin 19. 07. 2021, 14:57:46
Zdravím,

nemám s linuxem moc zkušeností, takže to bude nejspíše drobnost, ale budu rád za radu:

Raspberry s Raspberry Pi OS mi běží připojené k TV a mimo jiné tam chci pouštět slideshow z adresáře přístupného po síti.
To jsem zprovoznil přes feh, který spouštím příkazem "feh -Y -x -D 5 -F /home/pi/img/*"
Potřebuji ale, aby feh reagoval "okamžitě" na změnu ve složce img, tedy smazání souboru, případně nahrazení/přidání nového. Přes žádný parametr se mi toho nepodařilo docílit.

Tak mě napadla možnost, že bych feh třeba každých 5 minut ukončil a příkaz pustil znovu.
Jak toho prosím docílit? Nebo je nějaká elegatnější cesta?

Díky moc za každou radu.
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Křišťan Surname 19. 07. 2021, 15:17:03
feh má --auto-reload, který dělá přesně co potřebujete (přes inotify monitoruje změny v adresáři aby reagoval na přidání/odebrání obrázků).
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Glerin 19. 07. 2021, 15:30:10
Tento parametr jsem zkoušel a bohužel bez úspěchu, neaktualizuje se celý "filelist".
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Ink 19. 07. 2021, 15:44:37
Tento parametr jsem zkoušel a bohužel bez úspěchu, neaktualizuje se celý "filelist".

Pokud to neumi zobrazovat obasah adresare, jenom seznam souboru, je to asi problem. Ale zkusil bych neco takoveho:

https://stackoverflow.com/questions/12264238/restart-process-on-file-change-in-linux/12264265
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Death Walker 19. 07. 2021, 19:06:07
Ak je periodicke spustanie prikazu to co chcete, tak by som pozrel 'man crontab'.

Myslim ale ze viac vyhovie 'man inotifywait'...
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: _Jenda 19. 07. 2021, 20:07:38
Tak mě napadla možnost, že bych feh třeba každých 5 minut ukončil a příkaz pustil znovu.

feh spustíš na pozadí pomocí feh &

následně zjistíš PID posledního spuštěného procesu (=tohoto) jako pid_na_zapamatovani="$!"

pak buď můžeš udělat sleep 300; kill "$pid_na_zapamatovani"

nebo to pid zapsat do souboru a procesem, který zjistí, že došlo ke změně, ho killnout (elegantní by bylo použít inotify / inotifywait)

tohle samozřejmě poběží ve smyčce, takže se feh okamžitě znovu restartuje

bez zapamatování pid, pokud ti feh poběží jen jeden, můžeš taky dělat killall feh

pokud vadí problikávání, musíš nejdřív pustit nový feh na pozadí (to asi nějak půjde pomocí parametrů pro geometry nebo wmctrl), hodit ho na popředí a pak až killnout ten starý
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Death Walker 19. 07. 2021, 20:53:09
Btw, ako som zbezne nazrel do dokumentacie feh, tak ma parameter -R n, kde n je pocet sekund, po ktorych bude automaticky reloadovat. Co sa tyka --auto-reload, tak to pouziva tiez inotify, len to musi byt v tom builde zapnute.
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Death Walker 19. 07. 2021, 21:05:09
Btw, k tomu auto-reload. Podporuje jadro, ktore tam mas naistalovane, inode notifikacie, pre suborovy system ktory tam mas pouzity, a pre sposob akym ho mas moutnuty?
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Glerin 19. 07. 2021, 21:29:18
Díky moc všem za rady.
Btw, ako som zbezne nazrel do dokumentacie feh, tak ma parameter -R n, kde n je pocet sekund, po ktorych bude automaticky reloadovat. Co sa tyka --auto-reload, tak to pouziva tiez inotify, len to musi byt v tom builde zapnute.
feh s tímto parametrem sice reaguje na odstranění obrázku, ale bohužel ne na přidání nového.
Jak jsem psal, s linuxem začínám, takže Tvé další dotazy nevím, jak přesně zodpověďět.

Momentálně to vidím, že půjdu tou nejjednodušší cestou, takže zkusím crontab a scrip, co zabije feh a pustí ho znovu, jak radil _Jenda. Probliknutí jednou za pár minut nevadí.
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: _Jenda 19. 07. 2021, 22:21:05
feh s tímto parametrem sice reaguje na odstranění obrázku, ale bohužel ne na přidání nového.
No a nešlo by vymyslet si na začátku 100 „dummy“ obrázků a pak je novými nahrazovat?
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: k3dAR 20. 07. 2021, 03:40:04
pokud tech obrazku neni "tisice", muzes ve smycce poustet feh s jednou slideshow, takze pri kazdem dalsim pusteni to vezme aktualni seznam souboru...
Kód: [Vybrat]
#!/bin/sh
while true; do
feh -Y -x -D 5 -F --on-last-slide quit /home/pi/img/*
done
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Wrána diskuze 21. 07. 2021, 15:02:57
feh má --auto-reload, který dělá přesně co potřebujete (přes inotify monitoruje změny v adresáři aby reagoval na přidání/odebrání obrázků).
některý buildy fehu to mužou mit vypnutý :o :o flag 'inotify' hele (https://github.com/derf/feh#make-flags) :o :o
se to dá zistit když se udělá kuk do 'man feh' k tomu --auto-reload a tam by to jako mělo bejt napsaný jestli toje jakoby enabled/disabled  :o ;)

kromě autoreload by feh měl taky umět vobyč --reload kterej umí načítat šložšku v nějakým intervalu časovým sekundovým :D ;)
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: k3dAR 21. 07. 2021, 16:39:16
[...] se to dá zistit když se udělá kuk do 'man feh' k tomu --auto-reload a tam by to jako mělo bejt napsaný jestli toje jakoby enabled/disabled  :o ;)
snadneji:
Kód: [Vybrat]
feh --versiona ukaze to co ma zakompilovane za moznosti
pripadne v tom "man feh" rovnou na zacatku uvidi:
Citace
Compile-time switches in this build:
     •   inotify-based auto-reload of changed files disabled
Název: Re:Automatické restartování scriptu po nějakém čase
Přispěvatel: Wrána diskuze 22. 07. 2021, 00:18:43
[...] se to dá zistit když se udělá kuk do 'man feh' k tomu --auto-reload a tam by to jako mělo bejt napsaný jestli toje jakoby enabled/disabled  :o ;)
snadneji:
Kód: [Vybrat]
feh --versiona ukaze to co ma zakompilovane za moznosti
pripadne v tom "man feh" rovnou na zacatku uvidi:
Citace
Compile-time switches in this build:
     •   inotify-based auto-reload of changed files disabled

jj toje víc lepšejší  :D