shell编程-项目部署(优化篇)

时间:2023-06-13 17:04:56

 在实际工作中小编遇到了一个问题那就是当我去操作部署脚本的时候,另一个人也可以操作,这怎么能行啊,后来小编就觉得重新优化下代码,给它加一个进程锁

老规矩,先梳理下思路:

 同一时间内,脚本只能够允许一个人来操作,那么也就是说

 只要脚本执行就创建一个文件,只要存在这个文件,那么就让脚本退出,同时提示“脚本真在运行中”,脚本执行完毕,就删除创建的文件

 代码如下

  

  1.  #!/bin/bash
  2. # 功能:打包代码
  3. # 名称:deploy.sh
  4. # 作者:灰度
  5. # 版本:0.4
  6. # 联系方式:xxxxx
  7. # 日志功能
  8. write_log(){
  9. LOG_DATE=`date +%F`
  10. LOG_TIME=`date +%T`
  11. buzhou="$1"
  12. echo " ${LOG_DATE}  ${LOG_TIME} $0${buzhou}" >> /data/logs/deploy.log
  13. }
  14. # 增加锁文件
  15. add_lock(){
  16. echo "增加锁文件"
  17. touch /tmp/deploy.pid
  18. write_log "增加锁文件"
  19. }
  20. # 删除锁文件
  21. del_lock(){
  22. echo "删除锁文件"
  23. rm -f /tmp/deploy.pid
  24. write_log "删除锁文件"
  25. }
  26. # 打包代码
  27. tar_code(){
  28. echo "打包代码"
  29. ssh root@192.168.56.12 "/bin/bash /data/scripts/code_tar.sh"
  30. write_log "打包代码"
  31. }
  32. # 传输代码
  33. scp_code(){
  34. echo "传输代码"
  35. cd /data/codes/
  36. [ -f django.tar.gz ] && rm -f django.tar.gz
  37. [ -d django ] && rm -rf django
  38. scp root@192.168.56.12:/data/code/django.tar.gz ./
  39. write_log "传输代码"
  40. }
  41. # 关闭应用
  42. serv_stop(){
  43. echo "关闭nginx应用"
  44. /data/server/nginx/sbin/nginx -s stop
  45. write_log "关闭nginx应用"
  46. echo "关闭django应用"
  47. django_pid=$(lsof -Pti :8000)
  48. kill "${django_pid}"
  49. write_log "关闭django应用"
  50. }
  51. # 解压代码
  52. untar_code(){
  53. echo "解压代码"
  54. cd /data/codes/
  55. tar xf django.tar.gz
  56. write_log "解压代码"
  57. }
  58. # 放置代码
  59. fangzhi_code(){
  60. echo "备份原文件"
  61. B_TIME=$(date +%Y%m%d%H%M%S)
  62. mv /data/server/itcast/test1/views.py /data/backup/views.py-"${B_TIME}"
  63. write_log "备份原文件"
  64. echo "放置新文件"
  65. mv /data/codes/django/views.py  /data/server/itcast/test1/
  66. write_log "放置新文件"
  67. }
  68. # 开启应用
  69. serv_star(){
  70. echo "开启django应用"
  71. source /data/virtual/venv/bin/activate
  72. cd /data/server/itcast/
  73. python manage.py runserver >>/dev/null 2>&1 &
  74. deactivate
  75. write_log "开启django应用"
  76. echo "开启nginx应用"
  77. /data/server/nginx/sbin/nginx
  78. write_log "开启nginx应用"
  79. }
  80. # 检查
  81. check(){
  82. echo "检查部署效果"
  83. netstat -tnulp | grep ':80'
  84. write_log "检查部署效果"
  85. }
  86. main(){
  87. if [ -f /tmp/deploy.pid ]
  88. then
  89. echo "$0 脚本正在执行中..."
  90. exit
  91. else
  92. add_lock
  93. tar_code
  94. scp_code
  95. serv_stop
  96. untar_code
  97. fangzhi_code
  98. serv_star
  99. check
  100. del_lock
  101. fi
  102. }
  103. main