geplante Aufgabe mit Benutzerdefiniertem Script

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Dani Düsentrieb

Benutzer
Registriert
03. Jan. 2008
Beiträge
217
Reaktionspunkte
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
 
Kannst Du das Skript bitte posten?
 
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 ä.
 
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
 
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