Scriptausführung automatisieren mit cron

Status
Für weitere Antworten geschlossen.

wired2051

Benutzer
Mitglied seit
17. Mrz 2010
Beiträge
910
Punkte für Reaktionen
12
Punkte
44
Offenbar scheitere ich mal wieder an grundsätzlichem. :rolleyes:

Ich habe ein kleines Script, dass *.avi Dateien in *.mpg umwandeln soll und zwar alle im Verzeichnis video. Das funktioniert auch wunderbar.

Rich (BBCode):
#!/bin/sh
for i in *.avi
do
 ffmpeg -i $i -target pal-svcd ${i%.avi}
 done

Da es eine ganze Menge, recht grosse Dateien sind, würde ich die DS gerne vor sich hin werkeln lassen, also habe ich cron entsprechend konfiguriert.

Rich (BBCode):
#!/bin/sh                                                                                                         
#minute hour    mday    month   wday    who     command
0       0       *       *       *       root    /usr/sbin/ntpdate -b pool.ntp.org
30      10-20   *       *       *       root    /opt/bin/rsnapshot hourly
30      23      *       *       *       root    /opt/bin/rsnapshot daily
30      22      *       *       5       root    /opt/bin/rsnapshot weekly
30      21      1       *       *       root    /opt/bin/rsnapshot monthly
30      1       *       *       *       root    /volume1/video/avi2mpg.sh

Die Rechte des Scripts müssten auch richtig sein:

Rich (BBCode):
DS209> ls /volume1/video/avi2mpg.sh -l
-rwxr--r-- 1 root root 75 Oct 19 11:37 /volume1/video/avi2mpg.sh

Aus irgendeinem Grund scheint das Script aber nicht zu starten. Warum? :eek:

Kann man cron veranlassen ein Log zu erstellen oder gibt es gar eines? :eek:
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Schau die mal die cronjob-Verwaltung in meinem AdminTool an. Da wird auch ein Protokoll angefertigt.

Fehlerquellen können sein:

- Leerstellen statt Tabulatoren
- Windowszeileumbrüche statt Linuxzeilenumbrüche
- keine vollständigen Pfadangabe beim Tool ffmpeg
- keine vollständige Pfadangabe bei den Dateien (in der Schleifensteuerung)

Itari
 

wired2051

Benutzer
Mitglied seit
17. Mrz 2010
Beiträge
910
Punkte für Reaktionen
12
Punkte
44
Danke für Deine Hilfe!

Schau die mal die cronjob-Verwaltung in meinem AdminTool an. Da wird auch ein Protokoll angefertigt.

Sei mir nicht böse aber erstmal möchte ich es ohne probieren (vielleicht dummer Ehrgeiz).


- Leerstellen statt Tabulatoren
nein

- Windowszeileumbrüche statt Linuxzeilenumbrüche
nein, habe ich via Telnet unter Kubuntu erstellt, die anderen cronjobs arbeiten auch einwandfrei

- keine vollständigen Pfadangabe beim Tool ffmpeg
Ah, das könnte es sein (s.o.) aber wie ist der vollständige Pfad zu ffmpeg?

- keine vollständige Pfadangabe bei den Dateien (in der Schleifensteuerung)
Das verstehe ich nicht. Aber das Script funktioniert ohne cron-Steuerung einwandfrei, also nehme ich an, es ist in Ordnung.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
- keine vollständigen Pfadangabe beim Tool ffmpeg
Ah, das könnte es sein (s.o.) aber wie ist der vollständige Pfad zu ffmpeg?

- keine vollständige Pfadangabe bei den Dateien (in der Schleifensteuerung)
Das verstehe ich nicht. Aber das Script funktioniert ohne cron-Steuerung einwandfrei, also nehme ich an, es ist in Ordnung.

Vielleicht sagt which ffmpeg den Pfad.

In welchem Verzeichnis standest denn, als du das Skript manuell aufgerufen hattest (cd xyz????). Der crond (crond = cron-Server) hat nicht die Umgebungsvariablen (z.B. PATH) wie deine interaktive Shell, deswegen muss man ihm meist alles ganz genau mitteilen. Dass es auf der Kommandozeile funktioniert, bedeutet nur, dass du keine Syntax-Fehler im Skript hast ... aber nicht unbedingt, dass es im crond läuft.

Itari
 

wired2051

Benutzer
Mitglied seit
17. Mrz 2010
Beiträge
910
Punkte für Reaktionen
12
Punkte
44
So, ich habe jetzt das Script geändert:

Rich (BBCode):
#!/bin/sh
for i in *.avi
do
 /usr/syno/bin/ffmpeg -i $i -target pal-svcd ${i%.avi}
 done

In welchem Verzeichnis standest denn, als du das Skript manuell aufgerufen hattest (cd xyz????). Der crond (crond = cron-Server) hat nicht die Umgebungsvariablen (z.B. PATH) wie deine interaktive Shell, deswegen muss man ihm meist alles ganz genau mitteilen.

Beim testen des Scripts war ich im gleichen Verzeichnis wie das Script und die *.avi-Dateien, /volume1/video. Wenn Path wirklich das Problem ist, müsste es ja nun beseitigt sein. Mal schaun, ich hab den Job in cron jetzt mal auf 22:00 gestelllt...
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ich denke, dass der crond vollständige Pfade für die Dateien braucht, sonst wird er die nicht finden ;) Die Postition des Skriptes in der Dateihierarchie ist eher nebensächlich.

Itari
 

wired2051

Benutzer
Mitglied seit
17. Mrz 2010
Beiträge
910
Punkte für Reaktionen
12
Punkte
44
Mmmh. Klingt leider logisch.

Und funktioniert hat es auch wieder nicht.

Naja, vielen Dank erstmal bis hierher. Ich melde mich wieder.:rolleyes:
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Probiere doch einmal:

Rich (BBCode):
#!/bin/sh
for i in /volume1/video/*.avi
do
 /usr/syno/bin/ffmpeg -i $i -target pal-svcd ${i%.avi}
done

Itari
 

wired2051

Benutzer
Mitglied seit
17. Mrz 2010
Beiträge
910
Punkte für Reaktionen
12
Punkte
44
Vielen Dank Itari, funktioniert wunderbar!
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat