Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
yarichin
Сообщения: 371
Зарегистрирован: 13 июн 2021, 14:08
Решено: 2
Благодарил (а): 1 раз
Поблагодарили: 37 раз
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#1

16 окт 2022, 13:30

Всем привет. Собственно кратко в названии. Стримится потоковый адрес в ютуб. Стримит ffmpeg с VPS. Частенько сигнал подвисает . Варианта 2 , или просто висит , или изредка процесс просто исчезает. Нужно как то автоматизировать процесс , если сдохло или зависло - просто перезапустить.
Если кто в теме , задайте вопросы для уточнения.

Аватара пользователя

Chocobo
Сообщения: 10015
Зарегистрирован: 27 авг 2016, 22:57
Решено: 215
Откуда: НН
Благодарил (а): 815 раз
Поблагодарили: 3010 раз
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#2

16 окт 2022, 20:29

С перезапуском умершего процесса все несложно, два стандартных варианта
1. скрипт по крону чтоб раз в минуту искал процессы ffpmeg (условно если ps ax | grep ffmpeg | grep -v grep меньше единицы ) запускать новый.
2. Обернуть в service-юнит systemd, вроде бы simple типом будет, и указать Restart=Always или on-failure

А вот с зависшим чуть сложней, хрен его знает как понять что он молчит. Надо смотреть по статусу процесса меняется ли он, чтоб понять критерии для триггера перезапуска.
Изображение
   
Изображение

Аватара пользователя

Автор темы
yarichin
Сообщения: 371
Зарегистрирован: 13 июн 2021, 14:08
Решено: 2
Благодарил (а): 1 раз
Поблагодарили: 37 раз
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#3

16 окт 2022, 20:58

Chocobo писал(а):
16 окт 2022, 20:29
С перезапуском умершего процесса все несложно
Не совсем так. Большую часть времени идёт одновременно 2 стрима.
Chocobo писал(а):
16 окт 2022, 20:29
А вот с зависшим чуть сложней
Не то слово. Стрим запускается такой командой -- nohup ./ross1.sh > /dev/null &
Нагуглил мнение что можно как то притормозить сваливание лога в нуль , и там ловить ошибки или просто прекращение лога за определённый промежуток времени.
Есть ньюанс , в скриптах я как свинья в апельсинах :) Разжевать надо для понимания логики.

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#4

16 окт 2022, 21:48

Chocobo писал(а):
16 окт 2022, 20:29
(условно если ps ax | grep ffmpeg | grep -v grep меньше единицы ) запускать новый.
Проще так: pidof ffmpeg
Можно даже просто pidof ffmpeg || чего_запускать - сработает если не найдет pid от запущенного ffmpeg, т.е. нету ни одного такого процесса.

На счет зависания - там надо смотреть как именно висит. Если в состоянии зомби или wait - это можно отследить. Третья колонка (STAT) вывода ps как раз про это.
Но вообще-то вы сами себе проблему создали вызовом скрипта через nohup. Именно он не дает нормально ошибки обрабатывать и может приводить к зависаниям молча.

Аватара пользователя

Автор темы
yarichin
Сообщения: 371
Зарегистрирован: 13 июн 2021, 14:08
Решено: 2
Благодарил (а): 1 раз
Поблагодарили: 37 раз
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#5

16 окт 2022, 22:44

slant писал(а):
16 окт 2022, 21:48
проблему создали вызовом скрипта через nohup.
А как я должен его запускать на удалённом виртуальном сервере ? Не закрывать у себя терминал ?

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#6

16 окт 2022, 23:43

yarichin писал(а):
16 окт 2022, 22:44
А как я должен его запускать на удалённом виртуальном сервере ? Не закрывать у себя терминал ?
screen / tmux

Аватара пользователя

Автор темы
yarichin
Сообщения: 371
Зарегистрирован: 13 июн 2021, 14:08
Решено: 2
Благодарил (а): 1 раз
Поблагодарили: 37 раз
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#7

17 окт 2022, 00:55

slant писал(а):
16 окт 2022, 23:43
screen / tmux
Слышал , хотя и не использовал. Но это никак меня не приближает к основному вопросу. Только уберётся команда nohup .
В скрипте просто одна команда ffmpeg с соответствующими параметрами и опциями. В гугле увидел опцию для утилиты такого вида
ffmpeg -loglevel warning 2>> ng1.err , может приспособить это для вывода варнингов и ошибок , при появлении делать перезапуск со стиранием файла ошибок?
Вся строка в скрипте выглядит так
ffmpeg -re -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 4
-i https://ххххххххх.ххххххх.хххх.m3u8 -ignore_loop 0 -i flag.gif -filter_complex "overlay=822:20"
-b:v 1000k -q:v 5 -s 854x480 -f flv rtmp://x.rtmp.youtube.com/live2/ключ_трансляции

Аватара пользователя

slant
Сообщения: 4506
Зарегистрирован: 21 июн 2017, 18:09
Решено: 99
Благодарил (а): 51 раз
Поблагодарили: 1993 раза
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#8

17 окт 2022, 12:31

yarichin писал(а):
17 окт 2022, 00:55
Слышал , хотя и не использовал. Но это никак меня не приближает к основному вопросу.
Еще как приближает. Сможете увидеть - что именно и как висит, с какой ошибкой. И уже от этого можно будет отталкиваться.

Аватара пользователя

Автор темы
yarichin
Сообщения: 371
Зарегистрирован: 13 июн 2021, 14:08
Решено: 2
Благодарил (а): 1 раз
Поблагодарили: 37 раз
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#9

17 окт 2022, 12:40

slant писал(а):
17 окт 2022, 12:31
что именно и как висит, с какой ошибкой.
Обошёлся и без этого. Вставил в команду дополнение - -loglevel error 2> ewsol.err , теперь при зависе создаётся файл и выдаёт кучу разнообразных ошибок. Файл под спойлером.
[tls @ 0x7f33580029c0] Error in the pull function.
[tls @ 0x55d357887400] Error in the pull function.
[tls @ 0x55d357b9d1c0] Error in the pull function.
[tls @ 0x7f3358338b00] Error in the pull function.
[tls @ 0x7f3358052640] Error in the pull function.
[NULL @ 0x55d357ba7280] reference overflow 59 > 15 or 0 > 15
Invalid UE golomb code
[h264 @ 0x55d357bd2f00] mb_type -1094995534 in P slice too large at 0 34
[h264 @ 0x55d357bd2f00] error while decoding MB 0 34
[h264 @ 0x55d357bd2f00] no frame!
Error while decoding stream #0:0: Invalid data found when processing input
[aac @ 0x55d357bcf680] channel element 2.8 is not allocated
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x55d357bcf680] TYPE_FIL: Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[tls @ 0x7f3358338b00] Error in the pull function.
[tls @ 0x7f3358628680] Error in the pull function.
[tcp @ 0x7f3358688580] Connection to tcp://radio-live-mg.rtr-vesti.ru:443 failed: Connection timed out
[tls @ 0x7f3358411b80] Error in the pull function.
[tls @ 0x7f3358411b80] The specified session has been invalidated for some reason.
[aac @ 0x55d357bcf680] decode_band_types: Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[h264 @ 0x55d357bd2f00] corrupted macroblock 41 26 (total_coeff=-1)
[h264 @ 0x55d357bd2f00] error while decoding MB 41 26
[tls @ 0x7f33580b16c0] Error in the pull function.
[tls @ 0x7f33588414c0] Error in the pull function.
[tls @ 0x7f3358843b80] Error in the pull function.
[tls @ 0x7f335853be80] Error in the pull function.
[tls @ 0x7f335853be80] The specified session has been invalidated for some reason.
[NULL @ 0x55d357ba7280] reference overflow 59 > 15 or 0 > 15
Invalid UE golomb code
[h264 @ 0x55d357bd2f00] cbp too large (3199971767) at 7 27
[h264 @ 0x55d357bd2f00] error while decoding MB 7 27
[h264 @ 0x55d357bd2f00] no frame!
Error while decoding stream #0:0: Invalid data found when processing input
[aac @ 0x55d357bcf680] decode_band_types: Input buffer exhausted before END element found
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x55d357bcf680] channel element 3.13 is not allocated
Error while decoding stream #0:1: Invalid data found when processing input
[tls @ 0x7f3358023f40] Error in the pull function.
[tls @ 0x7f335859ea80] Error in the pull function.
[tls @ 0x7f33582e5200] Error in the pull function.
[tls @ 0x7f3358617780] Error in the pull function.
[tls @ 0x7f33585fd640] Error in the pull function.
[tls @ 0x7f33581d12c0] Error in the push function.
[tls @ 0x7f33585065c0] Error in the pull function.
[tls @ 0x7f335861cc80] Error in the pull function.
[tls @ 0x7f3358815680] Error in the pull function.
[tls @ 0x7f335861cc80] The specified session has been invalidated for some reason.
[aac @ 0x55d357bcf680] Number of bands (52) exceeds limit (41).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x55d357bcf680] channel element 3.10 is not allocated
Error while decoding stream #0:1: Invalid data found when processing input
[tls @ 0x7f33586c8d80] Error in the pull function.
[tls @ 0x7f3358816080] Error in the pull function.
[tls @ 0x7f33587c5880] Error in the pull function.
[tls @ 0x7f335842f3c0] Error in the pull function.
[tls @ 0x7f33587e9100] Error in the pull function.
[tls @ 0x7f335843a340] Error in the pull function.
[tls @ 0x7f335806ba40] Error in the pull function.
[tls @ 0x7f335809a440] Error in the pull function.
[NULL @ 0x55d357ba7280] reference overflow 59 > 15 or 0 > 15
[h264 @ 0x55d357bd2f00] corrupted macroblock 60 33 (total_coeff=-1)
[h264 @ 0x55d357bd2f00] error while decoding MB 60 33
[h264 @ 0x55d357bd2f00] no frame!
Error while decoding stream #0:0: Invalid data found when processing input
[aac @ 0x55d357bcf680] invalid band type
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x55d357bcf680] Number of bands (16) exceeds limit (13).
Error while decoding stream #0:1: Invalid data found when processing input
[tls @ 0x7f3358309ec0] Error in the pull function.
[tls @ 0x7f33584f6d00] Error in the pull function.
[tls @ 0x7f33580f7780] Error in the pull function.
Это результат нескольких зависаний. Не вижу смысла глубоко анализировать каждую строку. Запись появляется когда стрим виснет. По идее можно это приспособить. Как только в файле появляются записи - перезапускать скрипт , предварительно стерев данные в файле. Это только мысль , но я не могу её реализовать в виде скрипта , для этого не хватает тямы))

Аватара пользователя

Dja
Сообщения: 6884
Зарегистрирован: 27 авг 2016, 20:03
Решено: 30
Откуда: Voskresensk
Благодарил (а): 1312 раз
Поблагодарили: 724 раза
Контактная информация:

Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве

#10

30 авг 2023, 13:36

Не по теме
к названию :harakiri: :-D
А по сабжу - юниты же умеют.
[Service]

Restart=on-failure
впрочем, как и сказал Chocobo

Ответить

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя