Script funktioniert nicht am Stück
bruno1
- webserver
Hallo liebe Gemeinde,
ich habe heute ein seltsames Problem.
Ich habe mir ein Server-Backup Script geschrieben:
#!/bin/bash
date=date "+/tmp/backup-%Y-%m-%d.tar.bz2"
tar cfvj $date /var/www
ncftpput -u admin -p ***** xxx.xxx.xxx.xxx shares/USB/backup/ $date
rm -f $date
Führe ich das Script im Terminal Zeile für Zeile (bis auf die erste) aus, so funktioniert es wunderbar.
Führe ich es aber mit "bash backup.sh" aus (Das Script liegt im Verzeichnis /var/www), so kommt folgende Fehlermeldung:
[root@s15430844 www]# bash backup.sh
tar: Removing leading `/' from member names
tar: /var/www\r: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors
for reading: No such file or directory.08-12.tar.bz2
: could not open file.011-08-12.tar.bz2
Ich versteh das nicht.
Vermutlich liegt es an der ersten Zeile, dass bash hier falsch ist, oder?
bruno1
Hallo,
tar: /var/www\r: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors
for reading: No such file or directory.08-12.tar.bz2
: could not open file.011-08-12.tar.bz2
falsche Zeilenumbrüche?
Ich versteh das nicht.
Vermutlich liegt es an der ersten Zeile, dass bash hier falsch ist, oder?
Vermutlich liegt es an allen Zeilen - nämlich daran, dass sie mit \r\n enden, anstatt nur mit \n.
Merke: Windows verwendet üblicherweise \r\n als Zeilenumbruch, unixoide Systeme nur \n. Und die bash scheint hier das \r, das aus Windows-Sicht zum Zeilenumbruch gehört, dem Nutzinhalt zuzurechnen.
Ciao,
Martin
Hi,
falsche Zeilenumbrüche?
Vermutlich liegt es an allen Zeilen - nämlich daran, dass sie mit \r\n enden, anstatt nur mit \n.
Merke: Windows verwendet üblicherweise \r\n als Zeilenumbruch, unixoide Systeme nur \n. Und die bash scheint hier das \r, das aus Windows-Sicht zum Zeilenumbruch gehört, dem Nutzinhalt zuzurechnen.
Danke für den Hinweiß.
Ich hab jetzt die Datei mit touch backup.sh angelegt, sie dann mit vi backup.sh gefüttert, und sie anschließend noch mit chmod "u+x" backup.sh ausführbar gemacht.
Jetzt läuft das Script, zu mindest der Anfang, sollten während des Ausführens noch Fehler auftauchen, so melde ich mich später noch einmal.
Danke für die Hilfe
bruno1
Hi!
Ich hab jetzt die Datei mit touch backup.sh angelegt, sie dann mit vi backup.sh gefüttert
vi kann die Datei auch selbst anlegen.
Beachte außerdem, dass der PATH anders sein kann, wenn sie von verschiedenen Umgebungen heraus aufgerufen wird. In der Shell ist er für Anwender komfortabel lang. Vom Cron und aus anderen Umgebungen aufgerufen ist er oft "zu kurz". Grund ist, dass explizit das gewünschte Programm angegeben werden soll, damit nicht irgendwer irgendwas im Pfad vornanstellt und dein Script dann unbewusst was startet, was dir nicht lieb ist.
Lo!