我要实现的是在本地目录修改文件,自动同步更新到服务端去。
- 如果我们不习惯使用vim来在远程写代码,可以在本地用喜欢的IDE写,然后自动同步到远程进行编译和调试(别问我为什么要到远程去编译调试,C++带的.so文件已经把编译器版本锁定了)。当然可以用git来同步,但是提交什么的有点麻烦。
- 更改了的安装包需要同步部署到其他服务器去。
我们需要run_rsync.sh和auto_sync.sh两个脚本,假定需要同步的目录在./data目录下。 我们用rsync来同步,很多系统都自带了这个工具。
自动输入密码
run_rsync.sh
#!/usr/bin/expect
set SRC [lindex $argv 0]
set DST [lindex $argv 1]
set PASS [lindex $argv 2]
#--delete参数删除多余文件
spawn rsync -vazu --progress $SRC $DST
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$PASS\r" }
}
expect eof
if [catch wait] {
puts "rsync failed"
exit 1
}
exit 0
这里使用了expect来自动输入密码。
隔一段时间运行一次
auto_sync.sh
SRC=./data
DST=root@192.168.1.100:/home/test
PASS=***
while true;
do
./run_rsync.sh $SRC $DST $PASS > auto_sync.log
sleep 1s
done
每隔一秒钟同步一次,使用nohup在后台运行
nohup ./auto_sync.sh &
一切很好,再也不用学习难用的vim了。