• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Cron job - bash starten

fmhweb

Neues Mitglied
Hi,

ich würde gerne meine DB mit einer Bash sichern. Ich bin absoluter Anfänger in Bash und Cron. Für die Bash gibt es ausreichend Beispiele im Web, allerdings weiss ich jetzt nicht wie ich sie starten soll.

1. Muss die Bash im cgi Ordner liegen?
2. Wie muss der Cron job Befehl aussehen? (./sqlbackup/sqlbackup.sh)
3. Muss ich mit chmod (Rechte ändern) auch was machen?

Ich finde zum starten der Bash immer nur Beispiele für vollen Zugriff auf Linuxsysteme, mit, z.B. /root/scripte/test.sh
 
Werbung:
1. Muss die Bash im cgi Ordner liegen?

Wo sie liegt ist völlig dir überlassen. Wichtig ist lediglich, dass der Nutzer der sie über die crontab ausführt Zugriffsrechte darauf hat.

2. Wie muss der Cron job Befehl aussehen? (./sqlbackup/sqlbackup.sh)

So wie hier beschrieben:
cron
Crontab-Hilfe
Jobs ausführen mit cron

3. Muss ich mit chmod (Rechte ändern) auch was machen?

Code:
chmod 755 sqlbackup.sh

macht die Datei für den Besitzer der Datei ausführbar.
 
Die Bash ist doch nur die Shell (darum bash), wenn du dich einloggst bist du in der Regel schon in der Bash (weil diese die verbreiteste Shell ist). Die Script werden dann von crond einfach direkt als sh-Script (sh ist ein link auf /bin/bash) ausgeführt (was ausgeführt wird, sagt das sogenannte shebang: #!/bin/sh).

Mal zum Beweis, bei mir lokal:
Code:
[crash@homebox ~]$ ls -l  /bin/sh | grep sh
lrwxrwxrwx. 1 root root 4 13. Jul 17:34 /bin/sh -> bash

Du musst dir also ein Shell-Script vorstellen, wie eine Abfolge von Commandos, die du auch in die Shell tippen kannst (if, else, for etc. gehen auch direkt über die Eingabe).

@threadi: hier fehlt vorallem +x, damit das Bash-Script auch ausführbar ist. Die Schreibrechte sind eher nebensächlich.
 
Werbung:
Ersteinmal vielen Dank für die Antworten.

Ich hätte anmerken müssen das ich nur Zugriff über cPanel habe. Ich kann also nicht über eine Konsole auf das Linuxsystem zugreifen (und möchte das auch gar nicht da es sich um einen Shared Server handelt. Nicht das ich da was kaputt mache.).
Deshalb fällt, denk ich mal, der chmod Befehl weg?

Das mit /bin/sh habe ich noch nicht ganz verstanden. Liegt dort die Shell mit dem die Bash ausgeführt werden soll?

Unter cron jobs habe ich den folgenden Befehl eingegeben:
./public_html/sqlbackup/sqlbackup.sh
oder sollte ich lieber folgendes eingeben, z.B.:
mysite.com/sqlbackup/sqlbackup.sh

So gibt man den Befehl ein:
http://www.siteground.com/knox/tutorials/uploaded_images/images/cpanel_crystal/cron03.jpg

Der Job ist jedenfalls letzte Nacht nicht gelaufen.

Die Bash sieht so aus. Referenz:
http://www.schloebe.de/2007/03/platzsparende-datenbank-backups-via-cronjob/

#!/bin/sh
DIR="."
DATUM=`date '+%d-%m-%Y'`
mysqldump -u ***** -p ***** -h localhost --opt pictures > $DIR/backup.sql
gzip -9 --best $DIR/backup.sql
mv $DIR/backup.sql $DIR/backup-${DATUM}.sql.gz
find $DIR/backup.sql -name \*.sql.gz -mtime +5 -exec rm {} \;

Ich möchte das die Backupdatei im selben Ordner wo auch die Bash liegt abgelegt ist gespeichert wird. Ist es richtig hier bei DIR="." eine Punkt zu setzten?
 
Zuletzt bearbeitet:
und möchte das auch gar nicht da es sich um einen Shared Server handelt. Nicht das ich da was kaputt mache.

Guter Gedanke :)

Deshalb fällt, denk ich mal, der chmod Befehl weg?

Jain. Du musst die Datei per FTP ausführbar machen. So oder so. Wie das geht, hängt von deinem FTP-Programm ab.

Das mit /bin/sh habe ich noch nicht ganz verstanden. Liegt dort die Shell mit dem die Bash ausgeführt werden soll?

Ja.

Unter cron jobs habe ich den folgenden Befehl eingegeben:
./public_html/sqlbackup/sqlbackup.sh
oder sollte ich lieber folgendes eingeben, z.B.:
mysite.com/sqlbackup/sqlbackup.sh

Wenn Du cPanel hast wäre ein absoluter Pfad besser. Der müsste so aussehen wie
/var/www/vhosts/example.com/public_html/sqlbackup/sqlbackup.sh
Wie genau der in deinem Fall aussieht, solltest Du entweder im cPanel oder per phpinfo() rausbekommen.

Ist es richtig hier bei DIR="." eine Punkt zu setzten?

In dem Fall: ja.
 
$_SERVER['DOCUMENT_ROOT'] ist doch der absolute Pfad.

Leider bekomme ich eine Email in der steht:
/bin/sh: /home1/example/public_html/sqlbackup/sqlbackup.sh: /bin/sh^M: bad interpreter: No such file or directory

Auch mit mysite.com/sqlbackup/sqlbackup.sh geht es nicht.

Die Rechte habe ich über Filezilla auf 755 geändert.
 
Werbung:
Dann hast Du die Datei mit Windows erstellt. Das ^M ist ein Zeichen dafür. Deswegen kann das System die Datei nicht ausführen.

Speichere die Datei mit Linux-Zeilenumbrüchen. Dann sollte es klappen.
 
Es geht jetzt. Allerdings kommt jetzt folgender Fehler:

Enter password: mysqldump: Got error: 1045: Access denied for user 'user'@'localhost' (using password: NO) when trying to connect
mv: cannot stat `./backup.sql': No such file or directory
find: ./backup.sql: No such file or directory

Hier nochmal die Batch:

#!/bin/sh
DIR="."
DATUM=`date '+%d-%m-%Y'`
mysqldump -u user -p ***** -h localhost --opt pictures > $DIR/backup.sql
gzip -9 --best $DIR/backup.sql
mv $DIR/backup.sql $DIR/backup-${DATUM}.sql.gz
find $DIR/backup.sql -name \*.sql.gz -mtime +5 -exec rm {} \;

Mir ist unklar warum er sagt: using password: NO. Ich hab doch eins gesetzt. Mit php kann ich auf die Datenbank zugreifen, mit Passwort.

Die letzten zwei Zeilen des Fehlers sind ja klar, da er nichts erstellt hat.
 
Werbung:
bei -p **** darf kein Leerzeichen dazwischen sein. Das war der Fehler. Es geht zwar immer noch nicht richtig aber das bekomme ich schon irgendwie hin.

Vielen Dank für eure Hilfe!
 
Zurück
Oben