前言
因為停電,所以機器整個關機。今天要開的時候才發現爬蟲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 如何開啟或取消自動更新?
0 意見:
張貼留言