Страница 1 из 1
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 16 окт 2022, 13:30
yarichin
Всем привет. Собственно кратко в названии. Стримится потоковый адрес в ютуб. Стримит ffmpeg с VPS. Частенько сигнал подвисает . Варианта 2 , или просто висит , или изредка процесс просто исчезает. Нужно как то автоматизировать процесс , если сдохло или зависло - просто перезапустить.
Если кто в теме , задайте вопросы для уточнения.
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 16 окт 2022, 20:29
Chocobo
С перезапуском умершего процесса все несложно, два стандартных варианта
1. скрипт по крону чтоб раз в минуту искал процессы ffpmeg (условно если ps ax | grep ffmpeg | grep -v grep
меньше единицы ) запускать новый.
2. Обернуть в service-юнит systemd, вроде бы simple
типом будет, и указать Restart=Always
или on-failure
А вот с зависшим чуть сложней, хрен его знает как понять что он молчит. Надо смотреть по статусу процесса меняется ли он, чтоб понять критерии для триггера перезапуска.
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 16 окт 2022, 20:58
yarichin
Chocobo писал(а): ↑16 окт 2022, 20:29
С перезапуском умершего процесса все несложно
Не совсем так. Большую часть времени идёт одновременно 2 стрима.
Chocobo писал(а): ↑16 окт 2022, 20:29
А вот с зависшим чуть сложней
Не то слово. Стрим запускается такой командой --
nohup ./ross1.sh > /dev/null &
Нагуглил мнение что можно как то притормозить сваливание лога в нуль , и там ловить ошибки или просто прекращение лога за определённый промежуток времени.
Есть ньюанс , в скриптах я как свинья в апельсинах

Разжевать надо для понимания логики.
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 16 окт 2022, 21:48
slant
Chocobo писал(а): ↑16 окт 2022, 20:29
(условно если ps ax | grep ffmpeg | grep -v grep меньше единицы ) запускать новый.
Проще так: pidof ffmpeg
Можно даже просто
pidof ffmpeg || чего_запускать
- сработает если не найдет pid от запущенного ffmpeg, т.е. нету ни одного такого процесса.
На счет зависания - там надо смотреть как именно висит. Если в состоянии зомби или wait - это можно отследить. Третья колонка (STAT) вывода ps как раз про это.
Но вообще-то вы сами себе проблему создали вызовом скрипта через nohup. Именно он не дает нормально ошибки обрабатывать и может приводить к зависаниям молча.
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 16 окт 2022, 22:44
yarichin
slant писал(а): ↑16 окт 2022, 21:48
проблему создали вызовом скрипта через nohup.
А как я должен его запускать на удалённом виртуальном сервере ? Не закрывать у себя терминал ?
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 16 окт 2022, 23:43
slant
yarichin писал(а): ↑16 окт 2022, 22:44
А как я должен его запускать на удалённом виртуальном сервере ? Не закрывать у себя терминал ?
screen / tmux
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 17 окт 2022, 00:55
yarichin
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/ключ_трансляции
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 17 окт 2022, 12:31
slant
yarichin писал(а): ↑17 окт 2022, 00:55
Слышал , хотя и не использовал. Но это никак меня не приближает к основному вопросу.
Еще как приближает. Сможете увидеть - что именно и как висит, с какой ошибкой. И уже от этого можно будет отталкиваться.
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 17 окт 2022, 12:40
yarichin
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.
Это результат нескольких зависаний. Не вижу смысла глубоко анализировать каждую строку. Запись появляется когда стрим виснет. По идее можно это приспособить. Как только в файле появляются записи - перезапускать скрипт , предварительно стерев данные в файле. Это только мысль , но я не могу её реализовать в виде скрипта , для этого не хватает тямы))
Нужен скрипт для перезапуска ffmpeg при зависании или самоубийстве
Добавлено: 30 авг 2023, 13:36
Dja
Не по теме
к названию
А по сабжу - юниты же умеют.
[Service]
Restart=on-failure
впрочем, как и сказал
Chocobo