rsync gibt einen Fehler im Shell-Skript aus

rsync gibt einen Fehler im Shell-Skript aus

Ich habe ein Skript, das Dateien auf einen anderen Server kopiert. Ich möchte keine Dateien überschreiben, also muss ich rsync verwenden.

Ich kann rsync problemlos verwenden, wenn ich es in der Befehlszeile ausführe. Aber wenn ich es in einem Skript verwende, funktioniert rsync nicht. Es gibt einen Fehler aus und ich konnte diesen Fehler nicht einmal bei Google finden.

Hier ist der Fehler:

rsync: Failed to exec ssh: Not a directory (20)
rsync error: error in IPC code (code 14) at pipe.c(84) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(605) [sender=3.0.9]

Ich möchte darauf hinweisen, dass Fehler istnichtKeine solche Datei oder kein solches Verzeichnis(2)

Fehler ist:Kein Verzeichnis(20)

Hier ist das Skript:

#!/bin/bash
PATH=$1
FILE=$2
DAY=$(/usr/bin/date +'%Y-%m-%d')
/usr/bin/rsync -avh $PATH postgres@REMOTE_IP:/Backup/xlog_backup/$DAY/.

Ich verwende es so

sh ~postgres/archive.sh /srv/postgresql/data/pg_xlog/000000010000003E00000025 000000010000003E00000025

Hier ist die ls-Ausgabe:

postgres@MY_SERVER:~$ls -l /srv/postgresql/data/pg_xlog/000000010000003E00000025
-rw-------. 1 postgres postgres 16777216 May 25 10:41 /srv/postgresql/data/pg_xlog/000000010000003E00000025

Server: CentOS Linux Version 7.2.1511 (Core)

Rsync: Rsync-Version 3.0.9, Protokollversion 30

postgres@MEIN_SERVER:~$rpm -qa | grep openssh

openssh-clients-6.6.1p1-22.el7.x86_64

openssh-server-6.6.1p1-22.el7.x86_64

openssh-6.6.1p1-22.el7.x86_64

rsync-3.0.9-17.el7.x86_64

Können Sie mir helfen, das Problem zu lösen?

Antwort1

Nicht $PATHals Variable in Ihren Skripten verwenden!!!

Es wird Ihr, äh, überschreiben $PATH.

Ein Beispiel:

echo $PATH   
/home/maulinglawns/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

$PATHWas passiert, wenn ich etwas anderes zuweise ?

maulinglawns@debian-HP:~$ PATH=foo
maulinglawns@debian-HP:~$ echo $PATH
foo
maulinglawns@debian-HP:~$ ls
bash: ls: command not found

Als allgemeine Empfehlung würde ich vorschlagen, bei der Zuweisung von Variablen in Ihren Skripten ausschließlich GROSSBUCHSTABEN zu verwenden. Es ist besser, sie für die Umgebungsvariablen der Shell zu reservieren.

verwandte Informationen