在实际工作中小编遇到了一个问题那就是当我去操作部署脚本的时候,另一个人也可以操作,这怎么能行啊,后来小编就觉得重新优化下代码,给它加一个进程锁
老规矩,先梳理下思路:
同一时间内,脚本只能够允许一个人来操作,那么也就是说
只要脚本执行就创建一个文件,只要存在这个文件,那么就让脚本退出,同时提示“脚本真在运行中”,脚本执行完毕,就删除创建的文件
代码如下
#!/bin/bash
# 功能:打包代码
# 名称:deploy.sh
# 作者:灰度
# 版本:0.4
# 联系方式:xxxxx
# 日志功能
write_log(){
LOG_DATE=`date +%F`
LOG_TIME=`date +%T`
buzhou="$1"
echo " ${LOG_DATE} ${LOG_TIME} $0${buzhou}" >> /data/logs/deploy.log
}
# 增加锁文件
add_lock(){
echo "增加锁文件"
touch /tmp/deploy.pid
write_log "增加锁文件"
}
# 删除锁文件
del_lock(){
echo "删除锁文件"
rm -f /tmp/deploy.pid
write_log "删除锁文件"
}
# 打包代码
tar_code(){
echo "打包代码"
ssh root@192.168.56.12 "/bin/bash /data/scripts/code_tar.sh"
write_log "打包代码"
}
# 传输代码
scp_code(){
echo "传输代码"
cd /data/codes/
[ -f django.tar.gz ] && rm -f django.tar.gz
[ -d django ] && rm -rf django
scp root@192.168.56.12:/data/code/django.tar.gz ./
write_log "传输代码"
}
# 关闭应用
serv_stop(){
echo "关闭nginx应用"
/data/server/nginx/sbin/nginx -s stop
write_log "关闭nginx应用"
echo "关闭django应用"
django_pid=$(lsof -Pti :8000)
kill "${django_pid}"
write_log "关闭django应用"
}
# 解压代码
untar_code(){
echo "解压代码"
cd /data/codes/
tar xf django.tar.gz
write_log "解压代码"
}
# 放置代码
fangzhi_code(){
echo "备份原文件"
B_TIME=$(date +%Y%m%d%H%M%S)
mv /data/server/itcast/test1/views.py /data/backup/views.py-"${B_TIME}"
write_log "备份原文件"
echo "放置新文件"
mv /data/codes/django/views.py /data/server/itcast/test1/
write_log "放置新文件"
}
# 开启应用
serv_star(){
echo "开启django应用"
source /data/virtual/venv/bin/activate
cd /data/server/itcast/
python manage.py runserver >>/dev/null 2>&1 &
deactivate
write_log "开启django应用"
echo "开启nginx应用"
/data/server/nginx/sbin/nginx
write_log "开启nginx应用"
}
# 检查
check(){
echo "检查部署效果"
netstat -tnulp | grep ':80'
write_log "检查部署效果"
}
main(){
if [ -f /tmp/deploy.pid ]
then
echo "$0 脚本正在执行中..."
exit
else
add_lock
tar_code
scp_code
serv_stop
untar_code
fangzhi_code
serv_star
check
del_lock
fi
}
main