ubuntuusers.de

Kann Bashskript nicht ausführen

Status: Gelöst | Ubuntu-Version: Ubuntu 24.04 (Noble Numbat)
Antworten |

carnap64

Avatar von carnap64

Anmeldungsdatum:
1. Dezember 2021

Beiträge: 110

Hallo Forum,

ich habe mein erstes simples Bashskript dbackup.sh geschrieben.

Zuerst habe ich aber den Benutzer max für den Aufruf von rsnapshot konfiguriert, sodass er nicht mehr das Passwort eingeben muss:

max ALL=(ALL) NOPASSWD: /usr/bin/rsnapshot

Dann habe ich das Skript im Heimatverzeichnis abgelegt.

das Skript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#! /bin/bash

# Bei jedem Befehl warten, bis er ohne Fehler abgearbeitet ist; erst danach neuen Befehl ausführen:
set -e

# Ruft rsnapshot mit der Angabe des Backup-Intervalls beta auf:
rsnapshot beta

# Kopiert die Logdatei in das Verzeichnis Logs auf dem QNAP-NAS:
cp /home/max/rsnapshot_logs/.log /home/max/Public/Daten/Logs/rsnapshot/$(date +%Y-%m-%d--%H-%M)-backup.txt

Das Skript habe ich mit

chmod +x dbackup.sh

ausführbar gemacht

und danach mit

sudo mv $HOME/dbackup.sh /usr/local/bin

verschoben.

Nun sollte es ja ohne Weiteres aufgerufen werden können. rsnapshot ist natürlich installiert.

Wenn ich dbackup.sh im Terminal eingebe, wird folgender Fehler ausgegeben:

1
2
-bash: /usr/local/bin/dbackup.sh: kann nicht ausführen: benötigte Datei nicht gefunden
max@antec:~$

Was habe ich übersehen?

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 5010

Kann es sein das das Verschieben schief gegangen ist? Ich glaube da ist einiges nicht richtig.

Prüfe es z.B. im Dateibrowser.

Sollte da wirklich was schief gegangen sein versuch es so

sudo mv ~/dbackup.sh /usr/local/bin/

carnap64

(Themenstarter)
Avatar von carnap64

Anmeldungsdatum:
1. Dezember 2021

Beiträge: 110

Die Datei ist dort. Ich habe mit dem Gnome Dateiexplorer (keine Ahnung, wie das Programm wirklich heisst) nachgeschaut. Hier die Ausgabe des Terminals:

1
2
3
4
5
Last login: Tue Jul 23 21:17:03 2024 from 192.168.1.60
max@antec:~$ cd /usr/local/bin
max@antec:/usr/local/bin$ dir
dbackup.sh  doublecopy.sh  freefilesync  FreeFileSync
max@antec:/usr/local/bin$

schwarzheit Team-Icon

Supporter
Avatar von schwarzheit

Anmeldungsdatum:
31. Dezember 2007

Beiträge: 5010

Gut. Dann vergiss was ich sagte. Dann müssen andere ran. 😉

Scripte sind nicht meins, ich kämpfe auch jedesmal damit. 😀

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14384

carnap64 schrieb:

Die Datei ist dort.

Wie ist die Ausgabe von:

bash -x /usr/local/bin/dbackup.sh

?

carnap64

(Themenstarter)
Avatar von carnap64

Anmeldungsdatum:
1. Dezember 2021

Beiträge: 110

Hier die Ausgabe:

max@antec:/usr/local/bin$ bash -x /usr/local/bin/dbackup.sh
+ $'\r'
/usr/local/bin/dbackup.sh: Zeile 2: $'\r': Befehl nicht gefunden
+ set $'-e\r'
: Ungültige Option.kup.sh: Zeile 4: set: -
set: Aufruf: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
+ $'\r'
/usr/local/bin/dbackup.sh: Zeile 5: $'\r': Befehl nicht gefunden
+ $'\r'
/usr/local/bin/dbackup.sh: Zeile 8: $'\r': Befehl nicht gefunden
+ $'\r'
/usr/local/bin/dbackup.sh: Zeile 9: $'\r': Befehl nicht gefunden
+ $'\r'
/usr/local/bin/dbackup.sh: Zeile 12: $'\r': Befehl nicht gefunden
+ $'\r'
/usr/local/bin/dbackup.sh: Zeile 15: $'\r': Befehl nicht gefunden
+ rsnapshot $'beta\r'
Setting locale to POSIX "C"
echo 3414 > /var/run/rsnapshot.pid
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot beta
----------------------------------------------------------------------------
ERROR: Could not write lockfile /var/run/rsnapshot.pid: Permission denied
/usr/bin/logger -p user.err -t rsnapshot[3414] /usr/bin/rsnapshot beta : \
    ERROR: Could not write lockfile /var/run/rsnapshot.pid
+ $'\r'
/usr/local/bin/dbackup.sh: Zeile 18: $'\r': Befehl nicht gefunden
++ date +%Y-%m-%d--%H-%M
+ cp /home/max/rsnapshot_logs/.log $'/home/max/Public/Daten/Logs/rsnapshot/2024-                                                                                                                                                             07-23--21-56-backup.txt\r'
max@antec:/usr/local/bin$

Das sieht schlecht aus. Ich habe einen Verdacht: Ich hatte die Datei (das Skript) auf einem Windowsrechner geschrieben. Da ist ja etwas anders mit dem Zeilenumbruch als unter Linux.

1
$'\r': Befehl nicht gefunden

Ich werde wohl die Datei noch einmal unter Linux erstellen.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14384

carnap64 schrieb:

Ich werde wohl die Datei noch einmal unter Linux erstellen.

Ja, mit z. B. nano oder gleichwertig (als Editor).

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1284

Ich werde wohl die Datei noch einmal unter Linux erstellen.

Das musst du nicht. Du kannst auch das CR (\r) Zeichen löschen mit dem "tr" Befehl:

tr -d '\r' /usr/local/bin/dbackup.sh >~/dbackup.sh
chmod 755 ~/dbackup.sh
# Test, ob es funktioniert:
~/dbackup.sh
# und wieder nach /usr/local/bin kopieren
sudo mv ~/dbackup.sh /usr/local/bin/

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 838

Wohnort: Hamburg

Moin, das was mir auf den ersten blick aufgefallen ist, die shebang ist nicht ganz richtig, da ist ein Leerzeichen was da nicht hingehört.

Und unter Windoof kannst du auch scripte für Linux schreiben, meine Empfehlung entweder Notepad++ oder VisualStudio Code

carnap64

(Themenstarter)
Avatar von carnap64

Anmeldungsdatum:
1. Dezember 2021

Beiträge: 110

micneu schrieb:

[…] die shebang ist nicht ganz richtig, da ist ein Leerzeichen was da nicht hingehört.

Hi, das Leerzeichen sollte kein Problem sein: https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_f%C3%BCr_Anf%C3%A4nger/

Und unter Windoof kannst du auch scripte für Linux schreiben, meine Empfehlung entweder Notepad++ oder VisualStudio Code

Ich habe Notepad++ verwendet und als Sprache die Bash angegeben.

carnap64

(Themenstarter)
Avatar von carnap64

Anmeldungsdatum:
1. Dezember 2021

Beiträge: 110

@shiro: Das hat nicht ganz geklappt:

1
2
3
4
5
6
Last login: Wed Jul 24 11:43:11 2024 from 192.168.1.60
max@antec:~$ tr -d '\r' /usr/local/bin/dbackup.sh >~/dbackup.s~
tr: zusätzlicher Operand »/usr/local/bin/dbackup.sh“
Beim Löschen ohne Verdichten darf nur eine Zeichenkette angegeben werden.
„tr --help“ liefert weitere Informationen.
max@antec:~$

Ich habe nun die Datei des Skripts in Linux neu erstellt. Die genannten Fehlermeldungen werden nicht mehr angezeigt. Jetzt bekomme ich aber folgende Meldung:

Last login: Wed Jul 24 11:41:11 2024 from 192.168.1.9
max@antec:~$ gtrbackup.sh
Setting locale to POSIX "C"
echo 7780 > /var/run/rsnapshot.pid
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot beta
----------------------------------------------------------------------------
ERROR: Could not write lockfile /var/run/rsnapshot.pid: Permission denied
/usr/bin/logger -p user.err -t rsnapshot[7780] /usr/bin/rsnapshot beta: \
    ERROR: Could not write lockfile /var/run/rsnapshot.pid
max@antec:~$

Weshalb hat der Benutzer nicht das Recht, in /var/run/ zu schreiben?

Wie in meinem Eingangsposting habe ich den Benutzer max dazu berechtigt? Zumindest denke ich mir das ...

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14384

carnap64 schrieb:

Weshalb hat der Benutzer nicht das Recht, in /var/run/ zu schreiben?

Wie in meinem Eingangsposting habe ich den Benutzer max dazu berechtigt? Zumindest denke ich mir das ...

Kannst Du als Benutzer max, in der Kommandozeile:

touch /var/run/test12342.txt
rm /var/run/test12342.txt

ausführen?

fleet_street

Top-Wikiautor
Avatar von fleet_street

Anmeldungsdatum:
30. August 2016

Beiträge: 2400

Wohnort: Hunsrück (dunkle Seite)

carnap64 schrieb:

max ALL=(ALL) NOPASSWD: /usr/bin/rsnapshot

Das ist wohl der Auszug aus deiner sudoers.d Konfigurationsdatei. Dann musst du aber im Skript trotzdem mitteilen, dass du ein Programm nicht als normaler Benutzer, sondern als sudo ausführen möchtest. Woher soll es dass sonst wissen?

…
# Ruft rsnapshot mit der Angabe des Backup-Intervalls beta auf:
sudo rsnapshot beta
…

carnap64

(Themenstarter)
Avatar von carnap64

Anmeldungsdatum:
1. Dezember 2021

Beiträge: 110

fleet_street schrieb:

Das ist wohl der Auszug aus deiner sudoers.d Konfigurationsdatei.

Nein, das ist der Auszug aus der Datei sudo.conf.

Dann musst du aber im Skript trotzdem mitteilen, dass du ein Programm nicht als normaler Benutzer, sondern als sudo ausführen möchtest. Woher soll es dass sonst wissen?

OK, das hatte ich nicht verstanden gehabt. - Danke!

fleet_street

Top-Wikiautor
Avatar von fleet_street

Anmeldungsdatum:
30. August 2016

Beiträge: 2400

Wohnort: Hunsrück (dunkle Seite)

carnap64 schrieb:

Nein, das ist der Auszug aus der Datei sudo.conf.

Ah(?). Da bin ich mal gespannt, ob das wirkt. Das wäre mir neu, was andererseits nichts heißen mag.

man sudo.conf

sagt mir jedenfalls was anderes:

       Non-comment lines that don't begin with Plugin, Path, Debug, or Set are
       silently ignored.

OK, das hatte ich nicht verstanden gehabt. - Danke!

Bitte. Da mussten wir alle mal durch.

Antworten |