Pages - Menu

2019年12月11日 星期三

[Docker]Scrapyd Container無法啟動,搶救筆記

前言

因為停電,所以機器整個關機。
今天要開的時候才發現爬蟲scrapyd起不來,開始搶救過程。
連抓AWS金額的容器也掛了(這個是自建一個container執行爬蟲)。
最後想一想,反正都背爬蟲了,那就全部都掛在scrapyd上面吧。


正文

1.先看Log看原因是什麼

docker logs scrapyd –since 30m
沒資料,只好再把時間拉長,終於看到錯誤資訊。
但錯誤訊息只看到了
exceptions.AttributeError: 'int' object has no attribute 'splitlines'
爬了一下,發現  github 上面有人提到相同的問題,
說只要twistd 降版就好。

2.Container閃退,無法啟動

上面提到說只要把twistd降版就好,但是一啟動就關閉。
根本沒辦法進去後台下指令降版…
因此有幾種方式,但我後來沒採用。
a.提交已經陣亡的容器,在啟動臨時終端(我是沒試過)
b.直接去改先前修改失敗導致不能開機的檔案
可以參考  修改無法啟動的docker容器的配置5 ways to debug an exploding Docker container
但是要降版的話,不進去系統裡面是不行的,後來想了一下。
靠…這是Docker阿,建置最方便且快速的,我直接重建一個吧。
但…資料呢!?

 

3.搶救資料

以同樣的image新建立一個環境出來,因為之前建立的時候不知道資料放在哪,
所以必須先知道我之前的資料放在哪。

docker inspect old-scrapyd

查看舊的容器設定檔,將mount的位置記下(Fig .1)。

(Fig . 1)
再來就去每個位置裡面翻,看有沒有相關的存檔,
再跟剛開的新環境互相比對,看是不是這些檔案。
BTW,請用最高權限去查,不然進不去。

sudo su -

4.重建新環境

經由3的步驟,得知檔案的放置位置在container內的/var/lib/scrapyd,
於是 這次建立環境的時候,強制指定實體資料夾與container內的資料夾對應。

sudo docker run -d --name=scrapydII -p 6800:6800 -v ~/scrapyd:/var/lib/scrapyd rockyuan/scrapyd

BTW,如果碰到無法停止容器的話,可以試試這個指令

aa-remove-unknown

之後在下停止容器的指令即可。

5.尋找發生原因

爬蟲主程式弄好後,開始來尋找原因了。
腦力激盪的過程中,想到了  停電,所以關機後又開機。
是不是因為有系統更新導致後續的情況發生,因為AWS爬蟲的那個容器無法啟動,
而無法啟動的原因是OCI runtime create failed ,
根據Google出來的結果是docker核心與現有docker衝突。
於是又開始找系統更新的Log紀錄。
在 /var/log/apt/history.log 底下有著所有軟體安裝的紀錄,
一查,果然有安裝軟體更新的紀錄…。

6.關閉Ubuntu自動更新

預設通常有安裝,
沒有的話則安裝

sudo apt install unattended-upgrades

再來執行設定的指令

sudo dpkg-reconfigure -plow unattended-upgrades

選Yes為 自動更新,NO 則是不要自動更新。




ref.
scrapyd keeps creating db files
docker錯誤:Error response from daemon: cannot stop container
How do I get the history of “apt-get install” on Ubuntu?
Ubuntu Server 如何開啟或取消自動更新?





 

沒有留言:

張貼留言