rsync가 쉘 스크립트에서 오류를 발생시킵니다.

rsync가 쉘 스크립트에서 오류를 발생시킵니다.

파일을 다른 서버로 복사하는 스크립트가 있습니다. 파일을 덮어쓰고 싶지 않으므로 rsync를 사용해야 합니다.

명령줄에서 실행하면 아무 문제 없이 rsync를 사용할 수 있습니다. 하지만 스크립트에서 사용하면 rsync가 작동하지 않습니다. Google에서도 찾을 수 없는 오류가 발생합니다.

오류는 다음과 같습니다.

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]

오류가 있다는 점을 지적하고 싶습니다.아니요해당 파일이나 디렉터리가 없습니다(2)

오류는 다음과 같습니다디렉터리가 아님(20)

스크립트는 다음과 같습니다.

#!/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/.

저는 이렇게 사용하고 있어요

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

ls 출력은 다음과 같습니다.

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

서버: CentOS Linux 버전 7.2.1511(코어)

rsync: rsync 버전 3.0.9 프로토콜 버전 30

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

openssh-클라이언트-6.6.1p1-22.el7.x86_64

openssh-서버-6.6.1p1-22.el7.x86_64

openssh-6.6.1p1-22.el7.x86_64

rsync-3.0.9-17.el7.x86_64

이 문제를 해결하는 데 도움을 주실 수 있나요?

답변1

$PATH스크립트에서 변수로 사용 하지 마세요.! ! !

그게 당신의, 어, $PATH.

한 가지 예:

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

다른 것을 할당하면 $PATH어떻게 되나요 ?

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

일반적인 권장 사항으로는 스크립트에서 변수를 할당할 때 대문자를 완전히 사용하지 않는 것이 좋습니다. 이를 쉘 환경 변수로 유지하는 것이 가장 좋습니다.

관련 정보