Portál AbcLinuxu, 8. května 2025 16:10
Ahoj, kdysi jsem si napsal init.d skripty na spouštění a manipulaci s více instancemi dvblast+ffmpegu. Provozoval jsem jej do teď na Ubuntu 16.04, kde jsem toho času i z jiných důvodů vyhodil systemd a místo něj dal upstart-sysv a sysvinit. Nyní ten systém migruji na Ubuntu 20.04 a narazil jsem na problém. Můj init skript totiž používá další argument, kterým je konfigurační soubor. Tedy můžu z řádku ručně volat něco jako /etc/init.d/mujskript restart config1
Usage: $0 {start|stop|restart|force-reload} [config_file]
Funguje to tak, že pokud se volitelný parametr config neurčí, operace se provede nad všemi configy = instancemi. Pokud se určí, provede se operace jen nad danou instancí (třeba restart). Nyní jsem v systemd narazil, protože tam se předává jen první parametr (stop/start/restart/atd.), ale druhý už ne. Mám další aplikaci, která toto volání init skriptu využívá v případě potřeby manipulace s danou instancí, to ale můžu případně upravit, jak bude potřeba. V podstatě vše se řídí a určuje počtem konfiguračních souborů v daném umístění. Pro představu, ten jednodušší skript pro bvblast vypadá takto: https://pastebin.com/wYURJBMN
Děkuji.
Řešení dotazu:
[Unit] Description="Muj krasny dvbast %i" After=network.target [Service] Type=simple ExecStart=/usr/local/bin/dvblast EnvironmentFile=/etc/default/dvblast User=dvblast Group=dvblast Environment="ADAPTER=%i" [Install] WantedBy=multi-user.targetTo %i je název instance, takže když nastartuješ dvblast@adapter1.service, tak proměnná ADAPTER bude "adapter1". Viz https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers. Plus/mínus nějaké detaily by to mělo kompletně nahradit ten tvůj initscript. PID file nemusíš řešit, to pořeší systemd pomocí cgroups. Logování také dostaneš zdarma.
# systemctl list-units --all | grep ffmpeg-hls-restream ffmpeg-hls-restream.service loaded inactive dead FFmpeg restream to HLS ffmpeg-hls-restream@stream101.service loaded inactive dead FFmpeg restream to HLS for stream101 ffmpeg-hls-restream@stream102.service loaded inactive dead FFmpeg restream to HLS for stream102 ffmpeg-hls-restream@stream103.service loaded inactive dead FFmpeg restream to HLS for stream103 ffmpeg-hls-restream@stream104.service loaded inactive dead FFmpeg restream to HLS for stream104Chtěl bych se zeptat jestli je dan0, že se hlavní service spustí vždy před těmi dalšími konfiguračními? Lze to případně zajistit? Abych automatizoval zakládání a odmazávání neplatných services per config, chtěl bych před těmi dílčími vykonat skript, který by vypadal nějak takto:
CONFIGDIR="/etc/ffmpeg-hls-restream" systemctl stop ffmpeg-hls-restream@* systemctl disable ffmpeg-hls-restream@* systemctl daemon-reload systemctl reset-failed for CONFIGFILE in $CONFIGDIR/*.conf; do CONFIGFILE=$(basename -- "$CONFIGFILE") CONFIG="${CONFIGFILE%.*}" systemctl enable ffmpeg-hls-restream\@${CONFIG} doneProstě před vlastním spouštěním úloh pro jednotlivé konfigurace tento seznam nejprve aktualizovat. Až pak startovat. Oba soubory jsem zkopíroval do /etc/systemd/system/, v /etc/systemd/user/ mi je to nějak nevidí. Díky.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.