一、脚本框架
二、命令填充
三、完善功能
增加日志功能
增加锁文件功能
增加主函数逻辑
增加参数安全措施
脚本框架
#!/bin/bash
# 功能:打包代码
# 脚本名:deploy.sh
# 作者:json_steve
# 版本:
# 联系方式:steve_nash@foxmail.com
# 获取代码
get_code(){
echo "获取代码"
}
# 打包代码
tar_code(){
echo "打包代码"
}
# 传输代码
scp_code(){
echo "传输代码"
}
# 关闭应用
stop_serv(){
echo "关闭应用"
echo "关闭nginx应用"
echo "关闭django应用"
}
# 解压代码
untar_code(){
echo "解压代码"
}
# 放置代码
fangzhi_code(){
echo "放置代码"
echo "备份老文件"
echo "放置新文件"
}
# 开启应用
start_serv(){
echo "开启应用"
echo "开启django应用"
echo "开启nginx应用"
}
# 检查
check(){
echo "检查项目"
}
# 部署函数
deploy_pro(){
get_code
tar_code
scp_code
stop_serv
untar_code
fangzhi_code
start_serv
check
}
# 主函数
main(){
deploy_pro
}
# 执行主函数
main
#!/bin/bash
# 功能:打包代码
# 脚本名:deploy.sh
# 作者:json_steve
# 版本:
# 联系方式:steve_nash@foxmail.com
# 定义变量
LOG_FILE='/data/logs/deploy.log'
PID_FILE='/tmp/deploy.pid'
# 定义日志功能函数
write_log(){
date=$(date +%F)
time=$(date +%T)
buzhou="$1"
echo "${date} ${time} $0 : ${buzhou}" >> "${LOG_FILE}"
}
# 增加锁文件
add_lock(){
echo "增加锁文件"
touch "${PID_FILE}"
write_log "增加锁文件"
}
# 删除锁文件
del_lock(){
echo "删除锁文件"
rm -f "${PID_FILE}"
write_log "删除锁文件"
}
# 获取代码
get_code(){
echo "获取代码"
write_log "获取代码"
}
# 打包代码
tar_code(){
echo "打包代码"
ssh root@ip.ip.ip.ip "/bin/bash /data/scripts/tar_code.sh"
write_log "打包代码"
}
# 传输代码
scp_code(){
echo "传输代码"
cd /data/codes/
scp root@ip.ip.ip.ip:/data/codes/django.tar.gz ./
write_log "传输代码"
}
# 关闭应用
stop_serv(){
echo "关闭应用"
write_log "关闭应用"
echo "关闭nginx应用"
/data/server/nginx/sbin/nginx -s stop
write_log "关闭nginx应用"
echo "关闭django应用"
kill $(lsof -Pti :8000)
write_log "关闭django应用"
}
# 解压代码
untar_code(){
echo "解压代码"
cd /data/codes
tar xf django.tar.gz
write_log "解压代码"
}
# 放置代码
fangzhi_code(){
echo "放置代码"
write_log "放置代码"
echo "备份老文件"
mv /data/server/itcast/test1/views.py /data/backup/views.py-$(date +%Y%m%d%H%M%S)
write_log "备份老文件"
echo "放置信文件"
cd /data/codes
mv django/views.py /data/server/itcast/test1/
write_log "放置信文件"
}
# 开启应用
start_serv(){
echo "开启应用"
write_log "开启应用"
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 "检查应用"
}
# 部署函数
deploy_pro(){
add_lock
get_code
tar_code
scp_code
stop_serv
untar_code
fangzhi_code
start_serv
check
del_lock
}
# 定义报错函数
err_msg(){
echo "脚本 $0 正在运行中,请稍候..."
}
# 定义脚本帮助信息
usage(){
echo "脚本 $0 的使用方法: $0 [ deploy ]"
}
# 主函数
main(){
case "$1" in
deploy)
if [ -f "${PID_FILE}" ]
then
err_msg
else
deploy_pro
fi
;;
*)
usage
;;
esac
}
# 调用主函数
if [ "$#" -ne 1 ]
then
usage
else
main $1
fi