• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Shellscript: Befehl wird nicht ausgeführt

chrigu

Granny Smith
Registriert
17.09.05
Beiträge
15
Folgender Befehl wird bei mir im Terminal ohne Fehler ausgeführt:

Code:
/usr/local/bin/rsync -aE -z /Users [email protected]:/Volumes/backup_disk/mammut_users_sync > /Users/sync_protokoll

Wenn ich den gleichen Befehl ins Shellscript einfüge wird er leider nicht ausgeführt. Im Shellscript selber hab ich testhalber noch einen einfachen Befehl vorangeführt, um mir sicher zu gehen das es funktionieren müsste.

Code:
# Backup starten
/bin/date >> /Users/chrigu/Desktop/test.txt;

/usr/local/bin/rsync -aE -z /Users [email protected]:/Volumes/backup_disk/mammut_users_sync > /Users/sync_protokoll

/bin/date >> /Users/chrigu/Desktop/test.txt; erstellt mir erfolgreich eine Datei auf dem Desktop, die nächste Zeile wird aber nicht ausgeführt, obwohl die gleiche Zeile via Kommandozeile erfolgreich ohne Fehler funktioniert.

Kann mir das jemand erklären?

Gruss
 

AhabDE

Wohlschmecker aus Vierlanden
Registriert
23.10.04
Beiträge
239
Fuege mal am Anfang deines Shellscriptes ein welche Shell du ueberhaupt benutzen willst, z.B.:
#!/bin/sh oder #!/bin/bash etc

Zudem gibt es keinen path /usr/local/bin/rsync ... im system, sondern nur ein /usr/bin/rsync

Und ausfuehrbar muss das Script natuerlich fuer den User auch sein.
 

chrigu

Granny Smith
Registriert
17.09.05
Beiträge
15
Ich füge hier mal das ganze Script ein:

Code:
#!/bin/bash

# absolute Pfadangabe des Quellenverzeichnisses
declare quelle="/Users"

# absolute Pfadangabe des Zielverzeichnisses
declare ziel="/Volumes/backup_disk"

# Name des Sync Verzeichnis
declare sync_name="mammut_users_sync"

# ssh Login
declare ssh_login="[email protected]"


# Sicherungsintervall in Sekunden
declare -i sicherung_intervall=43200 # 12 Std.


# Pfad zu den vorzugweise verwendeten Programmen
#PATH=/usr/local/bin:$PATH

# sollvariablen für das sicherungsintervall in sekunden
declare -i sollzeit_users=$sicherung_intervall


	
# istvariablen des sicherungsintervalls
if [ -e $quelle"/"sync_protokoll ]
then
	declare -i istzeit_users=$(($(date +%s)-$(stat -f %m $quelle"/"sync_protokoll)))
else
	declare -i istzeit_users=$(($sicherung_intervall+10))
	/bin/date > $quelle"/"sync_protokoll
fi
	
if [ $istzeit_users -gt $sollzeit_users ]
then
		
		# Überprüfen ob mac im lokalen Netzwerk verfügbar ist.
		mac=`/sbin/ping -qn -c 1 wiseguy-christoph.local | grep -c "1 packets received"`
		
		if [ $mac = 1 ]
		then
				
				#Log Variable schreiben (Anfangszeit)
				declare backupBeg=$(date)

				# Backup starten
				/bin/date >> /Users/chrigu/Desktop/test.txt;
				#/usr/local/bin/rsync -auE -z --delete -e ssh ""$quelle"" ""$ssh_login":"$ziel"/"$sync_name"" > $quelle"/"sync_protokoll
				/usr/local/bin/rsync -aE -z /Users [email protected]:/Volumes/backup_disk/mammut_users_sync > /Users/sync_protokoll
				# Wenn Backup erfolgreich (komplett oder teilweise gesichert), dann Log schreiben
				if test $? = 0 -o $? = 23
				then
				
					#Log schreiben (Endzeit)
					echo "Sync begonnen um:" >> $quelle"/"sync.log
					echo $backupBeg >> $quelle"/"sync.log
					echo "Sync beendet um:" >> $quelle"/"sync.log
					/bin/date >> $quelle"/"sync.log
					echo "--------------------------------------" >> $quelle"/"sync.log
				fi
			fi
fi

Im Verzeichnis /usr/local/bin liegt eine Kopie von rsync:

-rwsr-sr-x 1 root admin 436472 Mar 27 22:23 rsync

Das Shellscript hat folgende Rechte:

-rwxr-xr-x 1 chrigu admin 1887 Apr 1 16:54 mammut_user_sync.sh

Komischerweise kann in das Script doppelklicken und es wird sogleich ausgeführt.
 

chrigu

Granny Smith
Registriert
17.09.05
Beiträge
15
Vielleicht noch einen Hinweis, die rsync Befehlszeile im Script wird ausgeführt, sobald ich keine ssh Verbindung herstelle, also nur Lokal einen Verzeichnisabgleich mache, ohne
Code:
[email protected]:/Volumes/backup_disk
.
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
chrigu schrieb:
Folgender Befehl wird bei mir im Terminal ohne Fehler ausgeführt:
/usr/local/bin/rsync -aE -z /Users [email protected]l:/Volumes/backup_disk/mammut_users_sync > /Users/sync_protokoll
Wenn ich den gleichen Befehl ins Shellscript einfüge wird er leider nicht ausgeführt.
Code:
/usr/local/bin/rsync -aE -z "/Users" "[email protected]:/Volumes/backup_disk/mammut_users_sync" >| "/Users/sync_protokoll"
Und nun?
 

chrigu

Granny Smith
Registriert
17.09.05
Beiträge
15
Negativ, ich hab vielleicht noch vergessen zu sagen, dass das Shellscript per Crontab ausgeführt wird.

geht nicht:
/usr/local/bin/rsync -aE -z "/Users" "[email protected]:/Volumes/backup_disk/mammut_users_sync" >| "/Users/sync_protokoll"

geht:
/usr/local/bin/rsync -aE -z "/Users/chrigu/Desktop/Quelle" "/Users/chrigu/Desktop/Ziel" >| "/Users/sync_protokoll"

Sobald ich also [email protected]:/Volumes als Ziel angegebe wird der Befehl per Crontab nicht ausgeführt, allerdings per doppelklick auf das Script mammut_user_sync.sh schon. Die ssh Verbindung klappt also auf alle Fälle.

Scheint irgendwie ne Knacknuss zu sein...
 

chrigu

Granny Smith
Registriert
17.09.05
Beiträge
15
Ich bin der Sache vielleicht etwas näher gekommen. Die ssh Schlüssel befinden sich im User-Verzeichnis /Users/chrigu/.ssh, der Cronjob wird allerdings von root ausgeführt womit ich vermute das root keinen passenden ssh Schlüssel findet.

Nun natürlich meine Frage wohin ich die id_rsa Schlüssel Dateien kopiere, damit auch root diese verwenden kann?
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
chrigu schrieb:
Nun natürlich meine Frage wohin ich die id_rsa Schlüssel Dateien kopiere, damit auch root diese verwenden kann?
Du musst neue anlegen. Benutze (ausnahmsweise) ein "su root" und folge der in der man-Page beschriebenen Prozedur.
(Nicht im SingleUser-Mode und auch kein sudo.)
 

chrigu

Granny Smith
Registriert
17.09.05
Beiträge
15
Also ich habe das Problem jetzt folgendermassen gelöst.

Die Schlüssel vom Benutzer chrigu /Users/chrigu/.ssh ins Benutzerverzeichnis von root /private/var/root/.ssh kopiert.