如何在rsync后执行bash脚本

3
当我在开发服务器上部署时,我使用rsync。但是在rsync之后,我需要执行一个.sh文件来进行“后”部署操作,例如清除缓存等操作。
通常我通过SSH来执行此操作,但如果我经常部署,那么编写以下内容会很烦人:
ssh ... 输入密码 cd /var/www/myapp/web ./after_deploy.sh
有没有一种快速完成此操作的方法?这是我的rsync.sh:
#!/bin/bash
host=""
directory="/var/www/myapp/web"
password=""
usage(){
        echo "Cant do rsync";
        echo "Using:";
        echo "   $0 direct";
        echo "Or:";
        echo "   $0 dry";
}
echo "Host: $host";
echo "Directory: $directory"
if [ $# -eq 1 ]; then
        if [ "$1" == "dry" ]; then
                echo "DRY-RUN mode";
                rsync -CvzrltD --force --delete --exclude-from="app/config/rsync_exclude.txt" -e "sshpass -p '$password' ssh -p22" ./ $host:$directory --dry-run
        elif [ "$1" == "direct" ]; then
                echo "Normal mode";
                rsync -CvzrltD --force --delete --exclude-from="app/config/rsync_exclude.txt" -e "sshpass -p '$password' ssh -p22" ./ $host:$directory
        else
                usage;
        fi;
else
        usage;
fi

这个 shell 脚本是在您的主机系统上执行还是远程执行? - Sylvain Leroux
必须远程执行 - Diego
2个回答

4

如果不使用SSH上的rsync,可以在服务器上运行rsync守护进程。这样可以使用/etc/rsyncd.conf中的pre-xfer execpost-xfer exec选项,指定传输前后需要运行的命令。

例如,在/etc/rsyncd.conf中:

[myTransfers]
     path = /path/to/stuff
     auth users = username
     secrets file = /path/to/rsync.secrets
     pre-xfer exec = /usr/local/bin/someScript.sh
     post-xfer exec = /usr/local/bin/someOtherscript.sh

您可以从客户端机器执行传输,相关脚本将自动在服务器上运行,例如:

rsync -av . username@hostname::myTransfers/ 

这种方法也很有用,因为与服务器上的传输相关的环境变量也可以被脚本使用。

更多信息请参见https://linux.die.net/man/5/rsyncd.conf


3
您可以在rsync命令后添加一个命令,以执行它而不是启动shell。
在rsync命令后添加以下内容:
sshpass -p "$password" ssh $host "cd $dir && ./after_deploy.sh"

你能帮我用我的代码替换你的代码吗?我无法替换它,总是出错...我认为可能是引号的问题。 - Diego

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接