Shell Script wird nicht ausgeführt

C

Caipirinha

Jungspund
Hallo,

ich bräuchte mal einen kleinen Denkanstoß.
Meine Erfahrungen mit cron und Shellscripts sind eher rudimentär.

Ein kleiner Einzeiler soll per cronjob jeden Tag um 1:50 Uhr morgens die jüngste Datei (cronologisch geordnet) auf Band sichern.

Code:
#!/bin/sh

tar cvf /dev/st0 /BACKUP/files/bpo/$(ls /BACKUP/files/bpo|tail -1)




Auszug aus /var/log/messages
Code:
Aug 25 01:50:01 backup01 /usr/sbin/cron[14715]: (root) CMD (/BACKUP/cronjobs/daily_tape_backup.sh)

Das Script wird ausgeführt, allerdings werden keine Daten auf Band geschrieben.

Wenn ich das Script manuell ausführe wird es ganz normal ausgeführt.

Weiß jemand warum das so ist?

Grüße

Caipi
 
Lass doch den Output des Crons einfach mal loggen:

Code:
/BACKUP/cronjobs/daily_tape_backup.sh > /var/log/tape_backup.log 2>&1

Damit bekommst du dann mit, ob irgendwelche Fehler auftreten.

Im übrigen kannst du auf das Skript auch verzichten und den Befehl einfach direkt in die Crontab eintragen, wenn es eh nur um einen Einzeiler geht.
 
Hallo bitmuncher, danke für den Tipp mit dem log: 'Permission Denied', der benutzer hatte keine Rechte das Script auszuführen... manchmal sieht man den Wald vor lauter Bäumen nicht.
 
Hi, nochmal ne Frage zu dem Script:

Leider klappt es immernoch nicht so ganz. Das Script hat die falsche Datei gesichert (also eine von vorgestern).
Habe es jetzt nochmal angepasst um wirklich nur die letzte Datei zu bekommen:

Code:
#!/bin/sh

tar cvf /dev/st0 /BACKUP/files/bpo/$(find /BACKUP/files/bpo/ -maxdepth 1 -type f -printf "%f\n" | sort | tail -1) > /var/log/tape_backup.log 2>&1

Beim manuellen ausführen gibt es keine Probleme. Über cron wird der Job allerdings nicht ausgeführt. Es erscheint auch kein log, kein Prozess... cron macht einfach nichts.

Auszug aus /var/log/messages
Code:
Aug 26 15:42:01 backup01 /usr/sbin/cron[28958]: (root) CMD (/BACKUP/cronjobs/daily_tape_backup2.sh)

Gibt es eine Möglichkeit den cron demon manuell zu starten ohne die eingetragenen Zeiten abzuwarten?

Gruß Caipi
 
Gibt es eine Möglichkeit den cron demon manuell zu starten ohne die eingetragenen Zeiten abzuwarten?

Trag doch den Job einfach temporär nochmal ein und setze dort eine Zeit, die dir passt. So musst du zum Testen nur diesen Eintrag ändern und kannst das Skript z.B. alle 5 Minuten aufrufen lassen. Wenn du mit Testen fertig bist, entfernst du den Eintrag dann einfach wieder.
 
Hallo,

langsam wirds ziemlich kurios.

Ziel ist es die jüngste Datei in einem verzeichnis auf Band zu sichern.

Code:
backup01:~ # ls -lh /BACKUP/files/bpo/
total 544G
-rw-r--r-- 1 root root  35G Aug 16 00:19 bpo_files_backup_2011-08-15.tar
-rw-r--r-- 1 root root  57G Aug 17 00:54 bpo_files_backup_2011-08-16.tar
-rw-r--r-- 1 root root  37G Aug 18 00:19 bpo_files_backup_2011-08-17.tar
-rw-r--r-- 1 root root  56G Aug 19 00:53 bpo_files_backup_2011-08-18.tar
-rw-r--r-- 1 root root  38G Aug 20 00:19 bpo_files_backup_2011-08-19.tar
-rw-r--r-- 1 root root  62G Aug 23 01:11 bpo_files_backup_2011-08-22.tar
-rw-r--r-- 1 root root  24G Aug 24 00:04 bpo_files_backup_2011-08-23.tar
-rw-r--r-- 1 root root  60G Aug 25 01:13 bpo_files_backup_2011-08-24.tar
-rw-r--r-- 1 root root  62G Aug 26 01:30 bpo_files_backup_2011-08-25.tar
-rw-r--r-- 1 root root 117G Aug 27 03:19 bpo_files_backup_2011-08-26.tar

In diesem Fall das File bpo_%_2011-08-26.tar

Leider speichert das Script immer nur die Datei bpo_%_2011-08-23.tar aufs Band.

Ich habe jetzt mehrere angehensweisen durchprobiert.

Code:
backup01:~ # cat /BACKUP/cronjobs/writetotape.sh
#!/bin/sh

#Speichern des zu sichernden Files in einer Datei
find /BACKUP/files/bpo/ -maxdepth 1 -type f -printf "%f\n" | sort | tail -1 > /BACKUP/files/backupfile.txt

#Speichern des Dateiinhalts in einer Variable.
BACKUPFILE=`cat /BACKUP/files/backupfile.txt | tail -1`

#BACKUPFILE=`find /BACKUP/files/bpo/ -maxdepth 1 -type f -printf "%f\n" | sort | tail -1`

#Ausfuehren des Backup Befehls
tar cvf /dev/st0 /BACKUP/files/bpo/$BACKUPFILE > /var/log/tape_backup.log 2>&1

Hier sieht man das ich ein File erzeuge wo der Dateiname der zu sichernden Datei enthalten ist. Dieser wird mit cat in einer Variable gespeichert. Diese Variable setze ich dann im tar Vefehl ein um die jüngste Datei auf Band zu schreiben.

Hier habe ich wieder das Problem, das wenn ich das Script manuell ausführe, es keinerlei Probleme gibt. Beim ausführen über cron allerdings funktioniert es nicht (richtig), weil die falsche Datei aufs band geschrieben wird.

Hier noch die crontab:

Code:
#Crontab des users root.

SHELL=/bin/sh

PATH=/usr/local/bin:/usr/local/sbin:/sbin/:usr/sbin:/bin/:usr/bin:/usr/bin/X11

#M      S       T M W Befehl
#-----------------------------------------------
0 23 * * 1-5 /BACKUP/cronjobs/files_backup.sh
0 23 30 * 1-5 /BACKUP/cronjobs/delete_old_backups.sh
#58 * * * * tar cvf /dev/st0 /BACKUP/files/bpo/$(find /BACKUP/files/bpo/ -maxdepth 1 -type f -printf "%f\n" | sort | tail -1) > /var/log/tape_backup.log 2>&1
#3 * * * * /BACKUP/cronjobs/daily_tape_backup2.sh

15 * * * * /BACKUP/cronjobs/writetotape.sh
Ich gehe schwer davon aus das der Befehl find beim Aufruf über cron Probleme macht, da er für die korrekte Datei verantwortlich ist.
Außerdem habe ich schon ausprobiert den Befehl find nicht in eine Datei, sondern direkt in eine Variable zu schreiben, mit dem selben Ergebnis.
Es ist egal was ich mache. Immer kommt die falsche Datei hinten raus.

Weiß jemand Rat?

Schöne Grüße

Caipi
 

Ähnliche Themen

NAS-Drive Mount in Bash-Script über crontab

Crontab und Scripts - Problem

Mein Server versendet SPAM in Massen

script wird als cronjob anders ausgeführt

Prozess aus eigenem Init script wird gekillt

Zurück
Oben