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

一般的な推奨事項としては、スクリプトで変数を割り当てるときに大文字のみを使用することは避けることをお勧めします。シェルの環境変数用に予約したままにしておく方がよいでしょう。

関連情報