1. 程式人生 > >一次walle項目錯誤處理--巨坑

一次walle項目錯誤處理--巨坑

權限 text 找到 沒有 HA delet 本地 system 重復出現

一次walle項目錯誤處理--巨坑

Walle的簡介我就不多說了它主要是一個web部署系統工具,具有一鍵快速回滾的功能,它能清晰的記錄 上線單申請、審核、部署和實時操作日誌,能支持各種web代碼發布回滾,對於jenkins來說應用時比較簡單一點。

對於walle,我現在的公司主要是使用walle實現代碼發布,(搭建可參考 walle搭建)下面是我配置的一個項目,(有修改,理解意思就好)先給大家貼個圖.

技術分享圖片

各配置的理解如下:

· 代碼的檢測倉庫目錄:如 /data/code/api

· 項目的用戶權限管理 www

· 生產環境的web目錄,該目錄的最後一個目錄不需要創建,發布時自動軟連生成

如:/data/www/www.api.com

· Walle的發布臨時目錄,存放web的版本 如: /data/publish/www/api

· 部署前準備任務:pre-deploy (前置檢查)

· 代碼檢出後處理任務post-deploy:如vendor和處理php命令

· 同步後更新軟鏈前置任務pre-release

· 發布完畢後收尾任務post-release:如重啟、一些文件的操作

一、問題出現

今天我在發布代碼的時候出現了錯誤(上線錯誤:更新代碼文件錯誤

技術分享圖片

這時,我就重復的再發布,還是不行,這個項目明前兩天還是可以發布的。(這時很納悶),沒辦法,百度找資料,結果沒找到,還是自己解決。

二、解決辦法與思路

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

發現錯誤如下

技術分享圖片

果然,我們找到了錯誤了,原來錯誤原因是cp命令復制錯誤,是因為沒有多余的空間導致的,我們找到問題出現的地方就好解決了。

查看本地的磁盤使用情況:

技術分享圖片

發現果然沾滿了

我們再查看一下Inodes的使用情況,

#df -i


技術分享圖片

發現它/data目錄Inodes使用情況是很少的。所以是/data的目錄磁盤沾滿了

接下來我們繼續查看data目錄占用是什麽情況導致磁盤空間沾滿的。

# du -sh /data


技術分享圖片

驚奇的發現,/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

測試結果:

查看磁盤占用情況,發現占用的空間回來了

技術分享圖片

重新發布項目,成功了(謝天謝地),艱難的解決了一個問題。

技術分享圖片

結果分析:

首先是www用戶的權限所引起的,然後就是php進程占用,導致同步不成功。

三、項目問題又出現。

第二天上班,想著發布一下項目上線啦,誰知道,又出現了錯誤,這就讓人崩潰了,明明昨天還能發布的。沒有想得太多,立刻就查看walle的日誌,發現又是磁盤空間不足。

1、問題的再度出現

使用命令查看/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的進程殺掉,再查看一下空間,發現還是那樣。

2、解決辦法。

出現了上面的結果,說明不是進程占用而導致的。說明是有文件占用而導致的。

查看/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的使用情況,發現占用的空間已經回來了。重新發布

技術分享圖片

發布成功,問題解決了。

3、問題出現分析

我在刪除文件的時候,發現,有十幾個文件的重復的,每個文件的大少達幾G,到底是什麽原因導致的呢。

最後發現肯定是自己在發布項目的時候,沒有等到發布完就刷新,然後又安部署,導致重復出現代碼目錄的出現,然後保留在發布目錄,導致累積。

註意事項:

在使用walle上線項目的時候,需要按F12來查看項目是否發布完成,再刷新,這樣的話就不會重復發布,導致代碼文件累積。

四、總結

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


一次walle項目錯誤處理--巨坑