Autor Zpráva
Jenicek
Profil
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
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.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: