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