shell编程-项目部署(二)
上节我们讲了项目部署的准备工作,现在具体讲下代码部署
首先梳理下思路,大致是这样:
获取代码
打包代码
传输代码
关闭应用
解压文件
放置文件(备份老文件,放置新的文件)
开启应用
最后检查下
OK,先这么来。。。
[一] 第一次尝试
获取代码
cd /data/code/django/
sed -i 's#1.0#1.1#' /data/code/django/views.py
打包代码
cd /data/code
tar zcf django.tar.gz django
传输代码
scp root@192.168.56.12:/data/code/django.tar.gz ./ # 12是代码仓库服务器
关闭nginx应用
/data/server/nginx/sbin/nginx -s stop
关闭django应用
lsof -Pti :8000 #获取端口对应的pid号
kill xxx #关闭进程
解压文件
cd /data/codes/
tar xf django.tar.gz
放置文件
mv /data/server/itcast/test1/views.py /data/backup/views.py-`date +%Y%m%d%H%M%S` # 这里我们给备份的文件加个时间戳 mv /data/codes/django/views.py /data/server/itcast/test1/ #放置新文件
开启应用
开启django应用
python manage.py runserver >>/dev/null 2>&1 &
deactivate
开启nginx应用
/data/server/nginx/sbin/nginx
检查一下
netstat -tnulp | grep ':80'
这样是没问题的,但是还是麻烦。。
[二] 第二次尝试
创建一个shell脚本,名字就叫deploy.sh 吧
#!/bin/bash
# 功能:打包代码
# 名称:deploy.sh
# 作者:枫客浪人
# 版本:0.2
# 联系方式:xxxxxxx # 打包代码
tar_code(){
echo "打包代码"
ssh root@192.168.56.12 "/bin/bash /data/scripts/code_tar.sh"
}
# 传输代码
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 ./
}
# 关闭应用
serv_stop(){
echo "关闭nginx应用"
/data/server/nginx/sbin/nginx -s stop
echo "关闭django应用"
django_pid=$(lsof -Pti :8000)
kill "${django_pid}"
}
# 解压代码
untar_code(){
echo "解压代码"
cd /data/codes/
tar xf django.tar.gz
}
# 放置代码
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}"
echo "放置新文件"
mv /data/codes/django/views.py /data/server/itcast/test1/
}
# 开启应用
serv_star(){
echo "开启django应用"
source /data/virtual/venv/bin/activate
cd /data/server/itcast/
python manage.py runserver >>/dev/null 2>&1 &
deactivate
echo "开启nginx应用"
/data/server/nginx/sbin/nginx
}
# 检查
check(){
echo "检查部署效果"
netstat -tnulp | grep ':80'
}
main(){
tar_code
scp_code
serv_stop
untar_code
fangzhi_code
serv_star
check
}
main
这样就方便多了吧,哈哈。。。要是能有个日志的功能该多好啊,出了问题就可以很方便的定位BUG了,可以增加一个日志的功能
三] 第三次尝试
#!/bin/bash
# 功能:打包代码
# 名称:deploy.sh
# 作者:枫客浪人
# 版本:0.3
# 联系方式:xxxxxxx
# 日志功能
write_log(){
LOG_DATE=`date +%F`
LOG_TIME=`date +%T`
buzhou="$1"
echo " ${LOG_DATE} ${LOG_TIME} $0${buzhou}" >> /data/logs/deploy.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(){
tar_code
scp_code
serv_stop
untar_code
fangzhi_code
serv_star
check
}
main
搞定。收工
shell编程-项目部署(二)的更多相关文章
- 7-1 shell编程基础之二
shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...
- 利用shell编程,部署项目到服务器
现在在前后端分离的开发形式中,每次前端将VUE项目打包之后,需要后端程序员部署到服务器上.这过程为何没有用git,因为每次vue打包后的文件都不相同与前一次打包,git为何的话,会包含过大迭代版本,同 ...
- SHELL编程笔记(二)之shell流程控制
Shell控制流程结构 本章内容有: 退出状态 While.for和until loops循环 If then else语句 脚本中动作 菜单 条件控制语句 If then els ...
- linux shell编程学习笔记(二) --- grep命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- Shell 编程(实例二)
创建一个脚本,为指定硬盘创建分区 1.列出当前系统所有磁盘,让用户选择,如果选择quit则退出脚本:如果选择错误,则重新选择 2.当用户选择完成后,询问是否继续 3.抹除选择磁盘上的分区,为其创建三个 ...
- shell编程题(二)
计算1-100之和 #!/bin/bash `;do #符号不是单引号 是 1左边的符号 sum=$[$i + $sum ] done echo $sum #!/bin/bash i= n=1 #定义 ...
- Shell编程-项目部署(一)
由于实际工作中经常用到需要部署项目,比较麻烦,今天记录下如何利用shell脚本完成自动部署的工作,毕竟不是专业的运维出身,写的不好,还请勿喷_^o^_ 今天以部署Django项目为演示,进行部署项目, ...
- shell编程(二)
第三十二次课 shell编程(二) 目录 十五.shell中的函数 十六.shell中的数组 十七.告警系统需求分析 十八.告警系统主脚本 十九.告警系统配置文件 二十.告警系统监控项目 二十一.告警 ...
- (C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令
原文(C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:( ...
随机推荐
- CSS 剩余宽度和高度完全填充
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- Beta 第五天
今天遇到的困难: 前端大部分代码由我们放逐的组员完成,这影响到了我们解决"Fragment碎片刷新时总产生的固定位置"的进程,很难找到源码对应 新加入的成员对界面代码不熟悉. 我们 ...
- web.config中configSections section节 -Z
由于最近一个项目的数据库变动比较频繁, 为了减少数据层的负担, 打算采用.net的MVC框架, 使用LINQ对付数据层. 这个框架的web.config文件里出现了configSectio ...
- 关于python中argsort()函数的使用
在实现<机器学习实战>中kNN代码时遇到需要将计算好的距离进行排序,即可使用argsort()函数,在此依据个人理解对该函数进行简单的介绍. 总的来说,argsort()函数是对数组中的元 ...
- beat冲刺计划安排
1. 团队成员 组长:郭晓迪 组员:钟平辉 柳政宇 徐航 曾瑞 2. 主要计划安排如下: 3. 详细日程任务安排
- JAVA的循环控制与循环嵌套
循环控制和循环嵌套 循环控制是除了循环条件之外,控制循环是否进行的一个机制,这给处理循环问题带来了灵活性.循环体内的语句块可以是顺序执行的语句,可以是分支结构的语句,也可以是循环语句,循环中含循环,就 ...
- JAVA_SE基础——63.String类的常用方法
获取方法int length() 获取字符串的长度char charAt(int index) 获取特定位置的字符 (角标越界)int indexOf(String str) 查找子串第一次出现的索 ...
- jenkins 简单实现php集成上线部署
基于公司git版本控制,搭建jenkins实现php集成部署(没有用gitlab,测试服配置较低,gitlab卡的不要不要的了-) 一.安装jenkins相关依赖 wget -O /etc/yum.r ...
- Apache虚拟主机实战
[root@localhost ~]# wget http://mirrors.hust.edu.cn/apache/httpd/httpd-2.2.32.tar.bz2 [root@localho ...
- linux下的Shell编程(4)特殊的变量和占位符
$#表示包括$0在内的命令行参数的个数.在Shell中,脚本名称本身是$0,剩下的依次是$0.$1.$2-.${9},等等. $*表示整个参数列表,不包括$0,也就是说不包括文件名的参数列表. $?表 ...