我有一个将文件复制到另一台服务器的脚本。我不想覆盖任何文件,所以我必须使用 rsync。
当我在命令行运行时,我可以毫无问题地使用 rsync。但是当我在脚本中使用它时,rsync 不起作用。它给出了一个错误,我什至在谷歌上找不到这个错误。
这是错误:
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-clients-6.6.1p1-22.el7.x86_64
openssh-server-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
作为一般建议,我建议在脚本中分配变量时完全避免使用大写字母。最好将它们保留为 shell 的环境变量。