ファイルを別のサーバーにコピーするスクリプトがあります。ファイルを上書きしたくないので、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
一般的な推奨事項としては、スクリプトで変数を割り当てるときに大文字のみを使用することは避けることをお勧めします。シェルの環境変数用に予約したままにしておく方がよいでしょう。