Autor | Zpráva | ||
---|---|---|---|
Jenicek Profil |
#1 · Zasláno: 22. 5. 2015, 13:56:27
Zdravím
na webu pouští 2-6 ffmpegů které jsou hodně podobné čas od času se mi ale stane, že se nechtěně rozběhne proces 2x pak bych ale potřeboval tento proces zabít a script se pak postará o restartování a znovu-zapnutí pouze jednoho procesu jak tedy nejlépe poznat duplicitivní proces a zabít pouze tyto duplicitivní procesy? v případě, že použiji killall tak zabiju i ostatní spuštěné ffmpegy které zabít nechci momentálně to řeším takto což se ani mě nelíbí :D Proces=$(ps aux | grep -v "grep" | grep ffmpeg | wc -l) if [ $Proces -gt "4" ]; then killall ffmpeg exit; fi |
||
Alphard Profil |
#2 · Zasláno: 22. 5. 2015, 14:06:38
ffmpeg používáte pro konverzi, nebo streaming? Nebylo by možné zabránit opakovanému spuštění? Přinejmenším u té konverze by neměl být problém vytvořet nějaký worker s frontovým zpracováním.
|
||
Jenicek Profil |
to jsem zkoušel i tam něco obdobného mám
ale je tu problém že ffmpeg má prodlevu pár sekund a tak vždy pár sekund není definovaný a čas od času se prostě stane že jej v administraci spustím v stejnou chvíli jako cron který načítá ale po 5min. a pak běží 2x stejný proces aniž bych to vědl a navzájem se to hádá... tak potřebuji vědět vždy jaké jsou stejné abych nemusel zabíjet všechny na severu proto bych chtěl nějak rozlišit jednotlivé procesy tak abych nemusel vypisovat PID ale jen prostě na místo grep ffmpeg dát třena grep ffmpeg-1 , grep ffmpeg-2 jediné co mě napadlo bylo vytvoření uživatelů pro jednotlivé příkazy ale do toho se mi moc nechce nešlo by příkaz prostě nějak pojmenovat? zabalením jsem myslel něco na způsob spustit v screen ... (našel jsem málo informací o tom, že screen lze pojmenovat?) |
||
juriad Profil |
Jenicek:
Nebudeš spouštět ffmpeg přímo, ale skript, který bude zamykat. Pro jednoduchost stačí něco jako toto (netestoval jsem to); je to náchylné na race-condition, ale ty asi nebudeš spouštět procesy každou sekundu: #!/bin/bash # vygenerujeme si název zámku z názvu souboru, který ffmpeg bude převádět (1. parametr skriptu) lock=`sha1sum <<< $1 | sed 's/[^a-f0-9]//g'` # pokud zámek existuje if [ -f $lock ]; then # přečteme si obsah - číslo procesu pid=`cat $lock` # zkontrolujeme, zda proces stále žije if ps $pid >/dev/null; then # pokud žije, ukončíme sebe a nic dělat nebudeme exit 1 else # pokud nežije, zámek odstraníme a pokračujeme dál rm $lock fi fi # uložíme své číslo procesu do zámku echo $$ > $lock # spustíme ffmpeg ffmpeg $1 $2 # smažeme zámek rm $lock Otestováno; opravena chybka na 6. řádku a umlčen ps. |
||
Časová prodleva: 10 let
|
0