一次walle项目错误处理--巨坑

             一次walle项目错误处理--巨坑php

Walle的简介我就很少说了它主要是一个web部署系统工具,具备一键快速回滚的功能,它能清晰的记录 上线单申请、审核、部署和实时操做日志,能支持各类web代码发布回滚,对于jenkins来讲应用时比较简单一点。node

对于walle,我如今的公司主要是使用walle实现代码发布,(搭建可参考 walle搭建)下面是我配置的一个项目,(有修改,理解意思就好)先给你们贴个图.mysql

1_LI (3).jpg

 

各配置的理解以下:git

·         代码的检测仓库目录:如 /data/code/apiweb

·         项目的用户权限管理 wwwsql

·         生产环境的web目录,该目录的最后一个目录不须要建立,发布时自动软连生成  如:/data/www/www.api.comcentos

·         Walle的发布临时目录,存放web的版本 如: /data/publish/www/apiapi

·         部署前准备任务:pre-deploy (前置检查)bash

·         代码检出后处理任务post-deploy:如vendor和处理php命令composer

·         同步后更新软链前置任务pre-release

·         发布完毕后收尾任务post-release:如重启、一些文件的操做

 

1、问题出现

今天我在发布代码的时候出现了错误(上线错误:更新代码文件错误

2.png

这时,我就重复的再发布,仍是不行,这个项目明前两天仍是能够发布的。(这时很纳闷),没办法,百度找资料,结果没找到,仍是本身解决。

2、解决办法与思路

 1、问题出现地方,post-deploy命令执行不了

这时我就想,是否是post-deploy的命令执行不了,致使上线不了。

解决办法:

想好就干,而后,我把项目的post-deploy命令删除了,而后上线。

测试结果:

结果,上线失败,仍是一样的错误证实发布不了仍是命令的问题。

2、问题出现地方,www没有权限。

 本身思考了一下,既然是post-deploy命令还没执行,就已经出现了问题,那个多是。www用户没有权限拉取代码。

解决办法:

给予代码检出目录的www权限,代码检出目录的拥有者为www,命令以下(操做在walle主机上)

#chown  -R www:www /data/code/api


切换用户测试

#su – www


代码拉取,测试post-deploy命令

去到代码检出目录

#cd /data/code/api
#git pull origin master

www用户测试php命令

#composer update
#php artisan migrate


测试结果:

结果,上线失败,仍是一样的错误。(感受眼都要黑了)

3、问题出现地方,查看walle日志。

正常安装的状况,walle的日志是放到/tmp/walle/ 目录下,查看最新的文件。日志已经自动安照时间来命令的了

解决思路:查看日志的错误地方

#cat /tmp/walle/walle-20180619.log | grep error

发现错误以下

3.png

果真,咱们找到了错误了,原来错误缘由是cp命令复制错误,是由于没有多余的空间致使的,咱们找到问题出现的地方就好解决了。

 查看本地的磁盘使用状况:

 4.png

发现果真沾满了

咱们再查看一下Inodes的使用状况,

#df -i


5.png

发现它/data目录Inodes使用状况是不多的。因此是/data的目录磁盘沾满了

接下来咱们继续查看data目录占用是什么状况致使磁盘空间沾满的。

# du -sh /data


6.png

惊奇的发现,/data目录占用,还远远达到90多G的占用状况,这时,咱们已经找到解决的思路了。

解决办法:

 出现了这种状况,咱们就已经想到,是/data目录确定是被那个进程占用了,解决办法就是把进程杀死,就基本完事了。Walle部署项目经过php的来执行的,咱们把一些占用、/data的线程杀死就能够了

#lsof  | grep /data/code | awk ‘{print $2}’| xargs kill – 9


或者你能够这样

#lsof | grep  deleted | awk ‘{print $2}’ | xargs kill – 9


(这里没能及时截到图)

杀完后重启php,由于刚刚的杀死进程的时候,已经把php杀死了

因此须要重启php

#service php-fpm restart

测试结果:

 查看磁盘占用状况,发现占用的空间回来了

7.png

从新发布项目,成功了(谢天谢地),艰难的解决了一个问题。

8.png

结果分析:

  首先是www用户的权限所引发的,而后就是php进程占用,致使同步不成功。

3、项目问题又出现。

  次日上班,想着发布一下项目上线啦,谁知道,又出现了错误,这就让人崩溃了,明明昨天还能发布的。没有想得太多,马上就查看walle的日志,发现又是磁盘空间不足。

一、问题的再度出现

使用命令查看/data目录的磁盘使用状况,发现以下

[root@centos api]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        50G   10G   37G  22% /
devtmpfs        3.9G     0  3.9G   0% /dev
tmpfs           3.9G   24K  3.9G   1% /dev/shm
tmpfs           3.9G  612K  3.9G   1% /run
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vdb1        99G   92G   1.6G  99% /data
tmpfs           783M     0  783M   0% /run/user/0
tmpfs           783M     0  783M   0% /run/user/1004


接着发现我又把php的进程杀掉,再查看一下空间,发现仍是那样。

二、解决办法。

出现了上面的结果,说明不是进程占用而致使的。说明是有文件占用而致使的。

查看/data的目录大少


[root@centos api]# du --max-depth=1 -h /data
2.9G    /data/wwwlogs
149M    /data/wwwroot
20G /data/files
68G /data/code
474M    /data/mysql
92G /data


咱们发现,源来/data/code目录出现了问题,使用du --max-depth=1 –h命令,一步步找到文件,删除文件。

 结果:

   从新查看/data的使用状况,发现占用的空间已经回来了。从新发布

9.png

发布成功,问题解决了。

三、问题出现分析

 我在删除文件的时候,发现,有十几个文件的重复的,每一个文件的大少达几G,究竟是什么缘由致使的呢。

  最后发现确定是本身在发布项目的时候,没有等到发布完就刷新,而后又安部署,致使重复出现代码目录的出现,而后保留在发布目录,致使累积。

  注意事项:

 在使用walle上线项目的时候,须要按F12来查看项目是否发布完成,再刷新,这样的话就不会重复发布,致使代码文件累积。

4、总结

   遇到错误,分析日志是一个很好解决错误的办法。要养成习惯才行。

相关文章
相关标签/搜索