ubuntuusers.de

Cron vs FFMPEG vs IP Cam

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

Stephan_H

Avatar von Stephan_H

Anmeldungsdatum:
18. September 2012

Beiträge: 183

Wohnort: Niederrhein / London

'Nabend!

Ich bastele gerade an einem Cron Job, der per FFMPEG einen IP Kamerastream aufnehmen soll.
Dazu 'crontab -e' und den Job eingetragen

40 17 17 10 * bash /home/USER/Test/testscript.sh 1>/home/USER/Test/testlog.txt 2>/home/USER/Test/CronLog.txt

bzw. auch ohne die 'bash' Angabe getestet. Hätte heute um 17:40 (UTC) starten müssen.
In diesem Falle nutze ich ein Testscript, das manuell auch funktioniert:

ffmpeg -loglevel debug -hide_banner -i
'http://192.123.4.567:123/videostream.cgi?user=USERNAME&pwd=PW' -y -f segment -segment_time 3600 -segment_format mp4 -segment_wrap 4 -c copy /media/USER/USB1/kamera/stream-%03d.mp4


Habe aber auch den 'ffmpeg' Befehl im Rohformat in's Crontab eingetragen.
Problem: Es wird nicht ausgeführt. Es gibt auch weder eine Fehler- noch eine Standardausgabe (die müßte man ja in den entsprechenden Dateien finden).
Ein einfacher 'cp' Befehl wird ebenfalls in der Shell ausgeführt, aber nicht per Crontab

cp /home/USER/Test/Testdok1 /home/USER/Test/Ziel1/ 1>>/home/USER/Test/test.txt

.
Auch habe ich versucht '/bin/bash --login' voranzustellen, wie in der Wiki vorgeschlagen- nix /dev/null, Nirwana!.
Wie kann ich analysieren, wo es hakt?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

Ist /home/USER/Test/testscript.sh ausführbar und hat einen :Shebang: ?

Wieso eigentlich /home/USER, meinst Du vielleicht /home/USER? Meinst Du /home/stephan aber wolltest den Pfad nicht offenbaren?

Die crontab benutzt nicht den PATH, der bei einer interaktiven Shell gesetzt ist.

Eventuell mal den ganzen Pfad zu ffmpeg in das Script mit dem Aufruf reinschreiben.

Und cron ist für wiederkehrende Aufgaben gedacht. Einen einzelnen Termin würde man über at starten:

Test-/Demokommando:

1
echo /usr/bin/notify-send -u critical wischdig | at -t 10180037 

Der Zahlencode 10180037 steht für "18.10. 00:37" und at muss wohl per apt install erst an den Start gebracht werden.

Stephan_H

(Themenstarter)
Avatar von Stephan_H

Anmeldungsdatum:
18. September 2012

Beiträge: 183

Wohnort: Niederrhein / London

user_unknown schrieb:

Ist /home/USER/Test/testscript.sh ausführbar und hat einen :Shebang: ?

Wieso eigentlich /home/USER, meinst Du vielleicht /home/USER? Meinst Du /home/stephan aber wolltest den Pfad nicht offenbaren?

Die crontab benutzt nicht den PATH, der bei einer interaktiven Shell gesetzt ist.

Eventuell mal den ganzen Pfad zu ffmpeg in das Script mit dem Aufruf reinschreiben.

Und cron ist für wiederkehrende Aufgaben gedacht. Einen einzelnen Termin würde man über at starten:

Test-/Demokommando:

1
echo /usr/bin/notify-send -u critical wischdig | at -t 10180037 

Der Zahlencode 10180037 steht für "18.10. 00:37" und at muss wohl per apt install erst an den Start gebracht werden.

Da USER sich nicht unbedingt auf mein eigenes Konto und Rechner bezieht, nameriere ich diesen einfach nicht.
Ich habe den Cron Job auf einem anderen Rechner getestet und er funktioniert.
Der Grund, warum es ein Cron job ist, daß ich FFMPEG regelmäßig neu starten möchte, falls es mal hängt.
Wenn die Verbindung zur IP Kamera mal hängt, macht FFMPEG meiner Erfahrung nach Feierabend.
Zeitabstände für den Neustart muß ich noch austesten, aber so will ich das Problem überbrücken.
Kompletter FFMPEG Pfad- wäre dann usr/bin/ffmpeg ?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

Stephan_H schrieb:

Da USER sich nicht unbedingt auf mein eigenes Konto und Rechner bezieht, nameriere ich diesen einfach nicht.

Ja, das ist ein ungelöstes Problem der Forenkommunnikation, dass manche stillschweigend eine eigene Syntax einführen, und man dann nicht weiß, ob im Code wirklich das Wort USER in Großbuchstaben steht, oder der Username. Beides kommt vor.

Ich habe den Cron Job auf einem anderen Rechner getestet und er funktioniert.
Der Grund, warum es ein Cron job ist, daß ich FFMPEG regelmäßig neu starten möchte, falls es mal hängt.
Wenn die Verbindung zur IP Kamera mal hängt, macht FFMPEG meiner Erfahrung nach Feierabend.
Zeitabstände für den Neustart muß ich noch austesten, aber so will ich das Problem überbrücken.
Kompletter FFMPEG Pfad- wäre dann usr/bin/ffmpeg ?

1
which ffmpeg

verrät Dir, wo im PATH ffmpeg zuerst (fast immer eh nur 1x) gefunden wird.

Wahrscheinlich in /usr/bin.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11250

Wohnort: München

Stephan_H schrieb:

Der Grund, warum es ein Cron job ist, daß ich FFMPEG regelmäßig neu starten möchte, falls es mal hängt.
Wenn die Verbindung zur IP Kamera mal hängt, macht FFMPEG meiner Erfahrung nach Feierabend.

Dafür ist cron IMHO nicht die beste lösung - ich würde für sowas eine Systemd/Service Unit nehmen, der man eine maximale Laufzeit und einen automatischen Restart gibt.

Für Dinge, die im Kontext der eigenen Desktop-Session passieren sollen (wie notify-send), bietet sich systemd/User Units an, weil da im Gegensatz zu Cron die Umgebungsvariablen für den DBus-Socket, das DISPLAY usw. schon automatisch passend gesetzt sind.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

seahawk1986 schrieb:

Für Dinge, die im Kontext der eigenen Desktop-Session passieren sollen (wie notify-send), bietet sich systemd/User Units an, weil da im Gegensatz zu Cron die Umgebungsvariablen für den DBus-Socket, das DISPLAY usw. schon automatisch passend gesetzt sind.

Notify-send habe ich nur benutzt, um zu zeigen, wie man ein at-Kommando eingeben kann. Beim ersten Mal will man ja i.d. Regel mit kurzem Feedback testen, ohne große Aktivitäten zu veranstalten.

Stephan_H

(Themenstarter)
Avatar von Stephan_H

Anmeldungsdatum:
18. September 2012

Beiträge: 183

Wohnort: Niederrhein / London

Update:
Der Cronjob funktioniert jetzt: Es lag daran, das ich, angemeldet als jeweiliger Nutzer, dem Crontab versehentlich eine Spalte für den Nutzer gegeben hatte, und Cron diese nicht erwartete. Diese Spalte fehlt im Nutzer Crontab, ist aber im Root Crontab enthalten.
Nutzerangabe entfernt- und es lief.
Jetzt lese ich mich mal in die Service Units ein. Besten Dank für den Hinweis schon mal.

Antworten |