Ubuntu

在命令返回之前終止並禁用/刪除無人值守升級

  • February 18, 2020

我在這裡遇到了一個問題,我嘗試使用 Ansible 自動化設置。

某些步驟需要與 互動apt,但有時我會收到錯誤,因為無人值守升級啟動並鎖定了 apt。這將使劇本停止。

我已經嘗試了很多方法來解決這個問題,最成功的是重複失敗的 apt 命令。

但這無法擴展,也不是 100% 可靠並且感覺很糟糕。

我選擇apt -y purge unattended-upgrades在劇本的開頭髮布權利。我也試過apt -y remove unattended-upgrades了,但是那個似乎還在工作時又回來了。清除似乎會像退出之前一樣關閉無人值守的升級,這正是我想要的。

但事實證明,即使是對的呼叫也apt -y purge unattended-upgrades可能由於鎖定而失敗。所以我把它改成了while [[ $(dpkg -l | grep -P "unattended-upgrades" | wc -c) -ne 0 ]]; do apt -y purge unattended-upgrades; done,但偶爾也會失敗(我不知道為什麼)

我需要一個命令,該命令在執行時將立即終止並隱藏無人值守的升級,無論它是否正在執行,並保證一旦該命令返回它就不會再啟動,直到我apt install再次明確它。如果該命令需要一分鐘來完成它的工作,那沒關係。

此外,系統沒有安裝 Python,因此 Ansible 僅發出raw命令,直到我設法安裝 Python,這應該是在成功呼叫apt -y update

我處於可以輕鬆觸發無人值守升級的狀態,因為這是一個虛擬機,一旦我發出date -s更正過時日期的命令,無人值守升級就會啟動。啟動虛擬機後,我有幾分鐘的時間直到date自動更正,然後開始無人值守升級。

這就是我現在正在做的事情:

- name: Disable autoupdate (part 1 of 2)
 raw: sed -i /Update/s/"1"/"0"/ /etc/apt/apt.conf.d/10periodic && sync

- name: Disable autoupdate (part 2 of 2)
 raw: echo 'APT::Periodic::Unattended-Upgrade "0";' >> /etc/apt/apt.conf.d/10periodic && sync

- name: Terminate any active autoupdate
 raw: ps -A | grep unattended-upgrades | awk '{print $1}' | xargs -r kill -15 $1

- name: Terminate any active dpkg
 raw: ps -A | grep dpkg | awk '{print $1}' | xargs -r kill -15 $1

- name: Allow dpkg to recover
 raw: dpkg --configure -a

- name: Purge autoupdate
 raw: apt -y purge unattended-upgrades    

- name: Update apt cache
 raw: apt -y update

- name: If needed, install Python
 raw: test -e /usr/bin/python || apt -y install python

終止 dpkg 讓我毛骨悚然。所有這些都在全新安裝的 Ubuntu Server 18.04.1 上執行


這是使用接受的答案創建的解決方案:

https://stackoverflow.com/a/51919678/277267

顯然unattended-upgrades是從系統單元 apt-daily.service / apt-daily-upgrade.service 之一執行的。(這些又由.timer同名的 systemd 單元觸發)。

您可以嘗試等待 systemd 單元,如下所示:

systemd-run --property="After=apt-daily.service apt-daily-upgrade.service" --wait /bin/true

這與您是否要發送 SIGTERMdpkgapt-get其他東西來嘗試讓它們更快地完成無關。kill只傳輸一個信號;它不等待任何東西。原則上,您總是需要某種方式等待,然後才能使用已釋放的資源。

引用自:https://unix.stackexchange.com/questions/463498