一次walle項目錯誤處理--巨坑php
Walle的簡介我就很少說了它主要是一個web部署系統工具,具備一鍵快速回滾的功能,它能清晰的記錄 上線單申請、審覈、部署和實時操做日誌,能支持各類web代碼發佈和回滾,對於jenkins來講應用時比較簡單一點。node
對於walle,我如今的公司主要是使用walle實現代碼發佈,(搭建可參考 walle搭建)下面是我配置的一個項目,(有修改,理解意思就好)先給你們貼個圖.mysql
各配置的理解以下: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、解決辦法與思路
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進程佔用,致使同步不成功。
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的使用狀況,發現佔用的空間已經回來了。從新發布
發佈成功,問題解決了。
三、問題出現分析
我在刪除文件的時候,發現,有十幾個文件的重複的,每一個文件的大少達幾G,究竟是什麼緣由致使的呢。
最後發現確定是本身在發佈項目的時候,沒有等到發佈完就刷新,而後又安部署,致使重複出現代碼目錄的出現,而後保留在發佈目錄,致使累積。
注意事項:
在使用walle上線項目的時候,須要按F12來查看項目是否發佈完成,再刷新,這樣的話就不會重複發佈,致使代碼文件累積。
4、總結
遇到錯誤,分析日誌是一個很好解決錯誤的辦法。要養成習慣才行。