自己搞个测试服务器,项目开发的时候,需要在git提交完毕之后,更新服务器上的代码。
在本地提交代码写了脚本,希望在尾部加一行命令,控制服务器git目录pull一下最新代码。
于是想到了
fix.sh
git add *
git commit -am 'fix'
git push origin master
curl http://host/update
通过curl发送一个网络请求到nginx,触发nginx的逻辑。
nginx在不安装其他插件的情况下,默认是没有办法调用cgi程序的。因此只能曲线救国了。
#nginx.conf
server{
listen 80;
server_name m.host.com;
location = /update{
access_log /usr/update.log;
}
location / {
root /www/;
index index.html index.htm;
}
error_log /usr/local/nginx/logs/m.host.com-error.log warn;
}
在server里面加一个location,拦截我们的请求,然后定义一个access_log文件。这样每次访问,就会将访问日志写入这个文件。
然后写一个shell脚本
while.sh
#!/bin/sh
# nohup sh /usr/local/while.sh
mfile=/usr/update.log
#启动一个循环,定时检查文件是否存在
while true; do
#监控文件大小
fsize=`stat -c "%s" $mfile`
if [ $fsize != 1 ]; then
echo "">$mfile
echo "update"
#TODO:需要的逻辑放这里
fi
sleep 1
done
脚本就是一个死循环,通过监测这个access_log文件的大小,来决定是否触发脚本。
运行这个脚本记得用 nohup指令
nohup sh /usr/local/while.sh