一次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、總結

   遇到錯誤,分析日誌是一個很好解決錯誤的辦法。要養成習慣才行。

相關文章
相關標籤/搜索