geplante Aufgabe mit Benutzerdefiniertem Script

Status
Für weitere Antworten geschlossen.

Dani Düsentrieb

Benutzer
Mitglied seit
03. Jan 2008
Beiträge
216
Punkte für Reaktionen
3
Punkte
18
Hi Zusammen,

ich habe mir ein Shellscript gebaut welches mir meine Datenbanken zeitgesteuert als .sql Datei in ein Sicherungsverzeichnis ablegt. Wenn ich das Script per Telnet mit sh testscript.sh ausführe, läuft das ohne Probleme und Fehlermeldungen durch und macht, was es soll. Lege ich mir nun dazu eine Aufgabe an, dann wird das Script zur geplanten Zeit ausgeführt aber zur gleichen Zeit abgebrochen. Als Ausführungsergebnis steht immer Unterbrochen (126).
Nach einigen Tests mit anderen Scripts habe ich nun das Problem das sämtliche Scripts, die ich neu anlege, mit der gleichen Meldung nicht laufen. Ich hab hier doch irgendwo nen Denkfehler, oder?

Gruß Daniel
 

dil88

Benutzer
Contributor
Sehr erfahren
Mitglied seit
03. Sep 2012
Beiträge
30.703
Punkte für Reaktionen
2.113
Punkte
829
Kannst Du das Skript bitte posten?
 

NSFH

Benutzer
Sehr erfahren
Mitglied seit
09. Nov 2016
Beiträge
4.099
Punkte für Reaktionen
578
Punkte
194
ohne Sript ist keine Analyse möglich.
Was bei mir ein Problem war, eines der Verzeichnisse hatte Umlaute im Namen. Das klappte dann erst nach Umstellen auf ae statt ä.
 

Dani Düsentrieb

Benutzer
Mitglied seit
03. Jan 2008
Beiträge
216
Punkte für Reaktionen
3
Punkte
18
So sieht's aus:

#!/bin/bash
# TARGET: Backup-Ziel
# IGNORE: Liste zu ignorierender Datenbanken (durch | getrennt)
# MSG: Notification
echo 'MySQL Backup start'
TARGET=/volume1/Sicherung/MySQL
IGNORE="mysql|information_schema|performance_schema"
DBS="$(mysql -uroot -p'mysqlpassword' -Bse 'show databases' | /bin/grep -Ev $IGNORE)"
KEEP=7
MSGYES='Die Datenbanken '
MSGFALSE='Die Datenbanken '

for DB in $DBS; do
echo 'Sicherung von Datenbank '$DB
NOW=$(date +"%Y-%m-%d")
FILENAME=${NOW}_${DB}
BACKUPS=`find $TARGET -name "*$DB.sql" | wc -l | sed 's/\ //g'`

while [ $BACKUPS -ge $KEEP ]
do
ls -tr1 $TARGET/*$DB.sql | head -n 1 | xargs rm -f
BACKUPS=`expr $BACKUPS - 1`
done

mysqldump --opt -uroot -p'mysqlpassword' --skip-extended-insert --skip-comments $DB > $TARGET/$FILENAME.sql

if [ "$?" -eq 0 ]
then
MSGYES=${MSGYES}' '${DB}
else
MSGFALSE=${MSGFALSE}' '${DB}
fi

done

MSGYES=${MSGYES}' wurden erfolgreich gesichert.'
MSGFALSE=${MSGFALSE}' konnten nicht gesichert werden.'

synodsmnotify @administrators 'MySQL Backup' "${MSGYES} ${MSGNO}"

echo 'MySQL Backup ende'

exit 0
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
13.804
Punkte für Reaktionen
3.761
Punkte
468
Der häufigste Fehler bei cronjobs-Scripts ist, dass übersehen wird, dass /etc/profile und ~/.profile nicht durchlaufen werden wie beim interaktiven Login und somit z.B. der Pfad ($PATH) evtl. nicht so sitzt wie beim interaktiven Aufruf.
Daher sollte man tunlichst die wichtigsten Dinge aus den profiles mit ins Script übernehmen. PATH=...; export PATH reicht zumeist.
Ich bin mir ziemlich sicher, dass es daran liegt.
 
Zuletzt bearbeitet:
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