Cron Job

NiclasM

Enthusiast
Thread Starter
Mitglied seit
06.02.2007
Beiträge
4.331
Ort
Dortmund
Hi

ich habe ein problem. Undzwar muss ich von einer Level One Kamera einen RTSP Stream abfangen. Das ganze hab ich auchschon so hinbekommen :

Code:
vlc --rtsp-tcp --run-time 86400 --sout '#standard{access=file,mux=mp4,dst=/home/niclas/VLCoutput.mp4}' rtsp://192.168.178.34/channel1 vlc://quit

Damit nimmt er 24 h einen String in eine Datei auf.
Mein Problem an der sache ist, dass die alte datei sofort überschrieben wird. ich würde gerne 7-10 Tage aufnehmen können. Am liebsten sollten die Video Daten , immer den namen des Tages haben ab wann aufgenommen wurde. Das ganze ohne leerzeichen.

Das ganze soll morgen in ein Debian Server implimentiert werden, weshalb ich ein laufendes Skript sehr gerne fertig haben würde.

Könnt ihr mir da helfen ? Wäre lieb wenn mir einer die drei zeilen Code machen könnte.

die Cron Tabelle sollte dann ja so aussehen oder ?

Code:
# m h dom mon dow user  command
0  0  * * *   niclas      ./opt/aufnahme.sh
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
shellscript erweitern, stichworte:
variable, datum (date)

z.b.:

Code:
#!/bin/sh
FILE="record_`date +%d.%m.%y`"
vlc --rtsp-tcp --run-time 86400 --sout '#standard{access=file,mux=mp4,dst=/home/niclas/$FILE.mp4}' rtsp://192.168.178.34/channel1 vlc://quit
exit 0

Edit: Dateinamen wären dann in dem Format: record_24.11.10.mp4, record_25.11.10.mp4, record_26.11.10.mp4


Beim cronjob musst du den absoluten Pfad zum Script angeben (nicht den relativen mit `.`), außer du wechselst vorher mit `cd` in das Verzeichnis und hängst dein script mit && hintendran.
Besser wäre:
1 0 * * * niclas /pfad/zum/script/aufnahme.sh > /dev/null 2>&1
(Würde empfehlen mit 1 Minute Verzögerung zu starten)

mfg
foxxx :wink:
 
Zuletzt bearbeitet:
Werd das ganze gleich noch Testen, aber vielen dank Foxx, du hast mir malwieder sehr geholfen!
 
Unter Debian hat vlc wohl die option "--start-time" nicht und meldet er würde dies nicht kennen. Das gleiche mit "--stream-time" .

Noch eine idee?
 
neue version über svn holen oder source besorgen und selbst kompilieren ...
 
Okay, also aufnehmen klappt.

Hast du eine idee wie speicherplatz schaffen kann ?

Also sagen wir mal alles was älter als 10 Tage ist, soll gelöscht werden.
 
Jetzt kannste ja selbst mal bisschen basteln, stichworte:

anhand meines beispiels hättest du das datum bereits im dateinamen -> verzeichnis auslesen und dateien auflisten, das "record_" vorne abschneiden (z.b. sed), und dann die namen mit dem aktuellen datum vergleichen, alles was älter als 10 tage ist.

evtl. gibt's dazu auch noch andere kommandozeilen-tools die eine solche funktionalität bereits mitbringen ...
 
Stichwörter:
find
ctime
exec

;)
 
Jap, ich werd mir was überlegen und etwas basteln. Hab dein Script auch etwas verändert. Momentaner Status :

Habs auf 1. Stunde aufnahmen umgesetzt
#!/bin/sh
FILE="`date +%H.%M-of-%d.%m.%y`"
cvlc --rtsp-tcp --run-time 3601 --sout '#standard{access=file,mux=mp4,dst=/home/niclas/'$FILE'.mp4}' rtsp://192.168.178.200/channel1 vlc://quit
exit 0

Kann so zwar nochnicht mit sed umgehen aber hab noch das Shell Programmierungs Buch von Galileo Design.



Idee :

find /home/niclas/ -mtime +7 -name *.mp4

Zeigt mir alle mp4 daten an, die älter als 7 Tage sind, die Anzeige lass ich in eine Datei schreiben. Hol mir die Erstel Zeile Raus, lösche die erste Zeile und mach das solange bis keine daten mehr drin sind.

Oder ich kann die ausgabe direkt in ein "rm" ringebekommen
 
Zuletzt bearbeitet:
klar, und zwar so:

Code:
#!/bin/sh
for datei in `find /home/niclas/ -mtime +7 -name "*.mp4" `; do
	echo "entfernte Datei: $datei" >> /deine/logdatei
	rm $datei
done

;)

Die echo-Zeile für die Logdatei ist natürlich optional.
 
Zuletzt bearbeitet:
Kurz für mein Verständis :

for schleife starten solange der befehl `find /home/niclas/ -mtime +7 -name "*.mp4" ` ein verändertes Ergebnis liefert, schreib jede Zeile in die Variable Datei. Diese wird in eine Log Datei geschoben und dann gelöscht.

Richtig ? :)

PS : Danke für deine Unterstüzung
 
Jo, er durchläuft die Schleife solange, bis im Ergebnis vom `find`-Befehl keine Zeilen mehr übrig sind ;)
Jedes dort gefundene Element kannst du so ganz einfach löschen.
Ggfs. vorher wie angedeutet noch einen Vermerk im Log machen, damit nachvollzogen werden kann, was wann gelöscht wurde (also evtl. noch aktuelle Uhrzeit beim Ausführen des Scripts mit in die Logdatei).
 
Code:
find /home/niclas/ -mtime +7 -name "*.mp4" -exec rm {} \;
Sollte auch funktionieren, ich übernehme keine Haftung für verlorengegangene Dateien :>
 
Hehe, werde heute den Befehl mal so ändern dass alles was älter über 1 Tag ist gelöscht wird, und mal schauen wie es sich verhält. Momentan sind sowieso noch keine wichtigen aufnahmen drauf. die Kamera wird erst in ein paar tagen ordentlich angebracht.
 
Wofür soll denn die Kamera sein, wenn bereits nach einem Tag alles gelöscht wird ?

Rein vom Zweck einer Kamera würde ich doch meist immer eine Woche an Aufnahmen aufheben, sollte auch nicht so enorm viel Speicherplatz fressen ...
 
1. Möchte ich das nur auf einen Tag einstellen um das Skript zu testen.
Dannach stell ich das auf 10 Tage ein, Speicherplatz reicht für 11,5 Tage
 
Sowas lässt sich auch mit logrotate machen. Dann könntest du auch z.B. komprimieren statt löschen (Je nachdem, wie gut sich die Dateien komprimieren lassen). Ist an sich ziemlich einfach einzurichten.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh