1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Shellscript: Befehl wird nicht ausgeführt

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von chrigu, 01.04.06.

  1. chrigu

    chrigu Granny Smith

    Dabei seit:
    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 chrigu@wiseguy-christoph.local:/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 chrigu@wiseguy-christoph.local:/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
     
  2. AhabDE

    AhabDE Wohlschmecker aus Vierlanden

    Dabei seit:
    23.10.04
    Beiträge:
    238
    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.
     
  3. chrigu

    chrigu Granny Smith

    Dabei seit:
    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="chrigu@wiseguy-christoph.local"
    
    
    # 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 chrigu@wiseguy-christoph.local:/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.
     
  4. chrigu

    chrigu Granny Smith

    Dabei seit:
    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:
    chrigu@wiseguy-christoph.local:/Volumes/backup_disk
    .
     
  5. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.905
    Code:
    /usr/local/bin/rsync -aE -z "/Users" "chrigu@wiseguy-christoph.local:/Volumes/backup_disk/mammut_users_sync" >| "/Users/sync_protokoll"
    
    Und nun?
     
  6. chrigu

    chrigu Granny Smith

    Dabei seit:
    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" "chrigu@wiseguy-christoph.local:/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 chrigu@wiseguy-christoph.local:/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...
     
  7. chrigu

    chrigu Granny Smith

    Dabei seit:
    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?
     
  8. Rastafari

    Rastafari Golden Noble

    Dabei seit:
    10.03.05
    Beiträge:
    17.905
    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.)
     
  9. chrigu

    chrigu Granny Smith

    Dabei seit:
    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.
     

Diese Seite empfehlen