当我在我的开发服务器上部署时,我使用rsync。但在rsync之后,我需要在"之后执行一个.sh文件。部署清除缓存等操作......
通常我是通过SSH来做的,但如果我经常部署它很无聊写:
有一种方法可以快速完成吗?这是我的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
答案 0 :(得分:4)
如果在服务器上运行rsync守护进程而不是通过SSH使用rsync,则可以使用pre-xfer exec
中的post-xfer exec
和/etc/rsyncd.conf
选项来指定要在之前和之后运行的命令/或转移后。
例如,在/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
pre-xfer exec = /usr/local/bin/someOtherscript.sh
然后您可以从客户端计算机进行传输,并且相关的脚本将在服务器上自动运行,例如:
rsync -av . username@hostname::myTransfers/
此方法也可能有用,因为脚本也可以使用与服务器上传输有关的环境变量。
有关更多信息,请参见https://linux.die.net/man/5/rsyncd.conf。
答案 1 :(得分:1)
您可以在rsync
命令之后添加命令来执行它而不是启动shell。
在rsync命令后添加以下内容:
sshpass -p "$password" ssh $host "cd $dir && ./after_deploy.sh"