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

一般的な推奨事項として、スクリプトで変数を割り当てるときに大文字を完全に使用しないことをお勧めします。これをシェル環境変数として保持するのが最善です。

関連情報