파일을 다른 서버로 복사하는 스크립트가 있습니다. 파일을 덮어쓰고 싶지 않으므로 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
일반적인 권장 사항으로는 스크립트에서 변수를 할당할 때 대문자를 완전히 사용하지 않는 것이 좋습니다. 이를 쉘 환경 변수로 유지하는 것이 가장 좋습니다.