Automatické restartování scriptu po nějakém čase

Automatické restartování scriptu po nějakém čase
« kdy: 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.


Re:Automatické restartování scriptu po nějakém čase
« Odpověď #1 kdy: 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ů).

Re:Automatické restartování scriptu po nějakém čase
« Odpověď #2 kdy: 19. 07. 2021, 15:30:10 »
Tento parametr jsem zkoušel a bohužel bez úspěchu, neaktualizuje se celý "filelist".

Ink

  • *****
  • 654
    • Zobrazit profil
    • E-mail
Re:Automatické restartování scriptu po nějakém čase
« Odpověď #3 kdy: 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

Re:Automatické restartování scriptu po nějakém čase
« Odpověď #4 kdy: 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'...


_Jenda

  • *****
  • 1 550
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Automatické restartování scriptu po nějakém čase
« Odpověď #5 kdy: 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ý

Re:Automatické restartování scriptu po nějakém čase
« Odpověď #6 kdy: 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.

Re:Automatické restartování scriptu po nějakém čase
« Odpověď #7 kdy: 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?

Re:Automatické restartování scriptu po nějakém čase
« Odpověď #8 kdy: 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í.

_Jenda

  • *****
  • 1 550
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Automatické restartování scriptu po nějakém čase
« Odpověď #9 kdy: 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?

k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Automatické restartování scriptu po nějakém čase
« Odpověď #10 kdy: 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

Re:Automatické restartování scriptu po nějakém čase
« Odpověď #11 kdy: 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 :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 ;)
lidi postižený environmentálním žalem hele choděj za ekopsycholožkama hele 🤡 💆 🤡 💆

k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Automatické restartování scriptu po nějakém čase
« Odpověď #12 kdy: 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

Re:Automatické restartování scriptu po nějakém čase
« Odpověď #13 kdy: 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
lidi postižený environmentálním žalem hele choděj za ekopsycholožkama hele 🤡 💆 🤡 💆