Bash ausführen über Crontab

Status
Für weitere Antworten geschlossen.

MaTriX

Benutzer
Mitglied seit
23. Dez 2008
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
Ahoi,

ich hab da ein problem.
Hab mir ein Backup script für externe Webserver erstellt:
URL besuchen (zip wird erstellt)
Zip via Link downloaden und im Ordner speichern.

So, wenn ich das Script via Hand starte läuft es durch und alles funktioniert.

Wenn der Crontab aber das script ausführt dann werden zwar die Ordner Local eingerichtet aber nur 0 Bytes Files gespeichert.
Auch wird ein SQL Backup angefertigt, über einen Script auf einem ext Webserver. Dieser erstellt einen Ordner mit allen von mir eingegebenen sql.gz Daten aus den SQL datenbanken und ich speicher den Inhalt des Ordner via FTP ab.

Woran könnte es liegen das ich aber immer 0 Bytes Files bekommen im Crontab aber 100% funktionsfähig wenn von Hand gestartet ?

Hier das Script:

Rich (BBCode):
#!/bin/bash

Auser="******"
Apass="******"

domain_file="/*****/"
backup_file="backup.zip"
pass="*******"

ldir="/volume1/Backups/Webserver/"
datum=$(date +%Y-%m-%d)

mkdir -m 777 $ldir$datum
mkdir -m 777 $ldir$datum"/SQL/"

domains="www.domain1.de www.domain2.com"
for domain in $domains
do
        mkdir -m 777 $ldir$datum"/"$domain

        lynx -dump -auth=$Auser:$Apass $domain$domain_file"?p="$pass

        wget --user=$Auser --password=$Apass $domain$domain_file$backup_file -O $ldir$datum"/"$domain"/"$backup_file

        lynx -dump -auth=$Auser:$Apass $domain$domain_file"?p="$pass"&d"

        chmod 0777 $ldir$datum"/"$domain"/"$backup_file
done

lynx -dump "www.domainSQL.de/run.php"
ftpcopy -u backup@domainSQL.de -p backup ftp://www.domainSQL.de $ldir$datum"/SQL/"

cp $ldir$datum"/" -r /volumeUSB1/usbshare/

Crontap sieht so aus:
Rich (BBCode):
#minute>hour<-->mday<-->month<->wday<-->who<--->command
0       0       0       *       2       root    sh /usr/own/backup.sh
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
In crontabs solltest du bei Befehlen jeweils den kompletten Pfad angeben
 

MaTriX

Benutzer
Mitglied seit
23. Dez 2008
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
d.h. ?

für mich sind die pfade komplett, oder etwa nicht ?
 

mkl0815

Benutzer
Mitglied seit
23. Sep 2009
Beiträge
138
Punkte für Reaktionen
0
Punkte
0
Nein sind sie nicht.

z.B. statt "wget" "/opt/bin/wget"

Desweiteren steht in der "Shebang" "/bin/bash". Liegt denn die Shell auch da?
Weiterhin macht es da z.B. Sinn ein "/bin/bash --login" hinzuschreiben, dann werden auch die Pfade aus der /etc/profile bzw. /etc/bashrc geladen, so diese vorhanden sind.
Alternativ kannst Du in der Crontab ja schon die bash angeben zum starten des Scriptes.
 

MaTriX

Benutzer
Mitglied seit
23. Dez 2008
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
Ah ich verstehe, danke :)

Du, ich setze mich das erste mal mit dieser Script Geschichte auseinander.
Ich kann nur PHP und JS.
Deswegen sind mit irgendwelche bash geschichten unbekannt, noch :D

was /bin/bash angeht gibt es nix im Ordner, wüsste aber auch nicht wo es dies gibt.
Hab es einfach da so geschrieben weil ich es irgendwo gelesen habe *grins*

PS.: Crontap ausgeführt und POSITIV, lag am dem Pfad =)
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Verwende doch z.B. #!/bin/sh oder #!/opt/bin/bash (falls du bash via ipkg installiert hast)
Das Problem mit den Pfaden ist, dass einen eigenen PATH verwendet, der nichts mit dem PATH der beim Booten gesetzt wird zu tun hat.
Ich weiss nicht ob es mit dem default cron auch geht (habe das bei mir nur beim ipkg cron), aber du kannst auch den PATH vorgeben, den cron für alle Jobs setzen soll. Du kannst z.B. in der Hauptdatei (/etc/crontab) die default Werte von cron überschreiben z.B.
Code:
[SIZE=2]SHELL[FONT=monospace]=/opt/bin/bash
[/FONT]PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin[/SIZE]:/opt/bin:/opt/sbin
Afaik musst du die Shell in deinen Scripten nicht zwangsläufig angeben, wenn sie via cron ausgeführt werden. Denn cron setzt folgende default Werte
http://www.tin.org/bin/man.cgi?section=5&topic=crontab
SHELL wird auf /bin/sh gesetzt
PATH wird auf /usr/bin:/bin gesetzt
HOME und LOGNAME werden aus /etc/passwd gelesen. Gemäss dem Eigentümer der crontab Datei. HOME kann man afaik noch überschreiben. LOGNAME afaik lässt sich nicht überschreiben
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Das mit den Pfaden ist unter Windows übrigens genauso ... Systemsteuerung->System->dann nach Umgebungsvariablen suchen ;)

Itari
 

janine

Benutzer
Mitglied seit
15. Feb 2013
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
Nein sind sie nicht.

z.B. statt "wget" "/opt/bin/wget"

Desweiteren steht in der "Shebang" "/bin/bash". Liegt denn die Shell auch da?
Weiterhin macht es da z.B. Sinn ein "/bin/bash --login" hinzuschreiben, dann werden auch die Pfade aus der /etc/profile bzw. /etc/bashrc geladen, so diese vorhanden sind.
Alternativ kannst Du in der Crontab ja schon die bash angeben zum starten des Scriptes.

Vielen herzlichen Dank! Das hat mir das Suchen, warum mein Script nicht läuft, erleichtert!
 
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