安全釋放 Ubuntu 的 APT 鎖定並完成更新

錯誤「無法取得鎖定 /var/lib/dpkg/lock-frontend」通常意味著另一個軟體包管理程序正在運行。請等待該進程完成,如果問題仍然存在,請確定是哪個進程在運行,然後再修復任何中斷的軟體包配置;刪除鎖定檔案並非安全的修復方法。

APT 是 Ubuntu 的軟體包管理工具,而 則dpkg負責執行底層軟體包的安裝和配置。它們使用鎖定機制來防止兩個操作同時更改軟體包狀態。鎖定檔案在正常運作期間可能一直保留在磁碟上,因此它的存在本身並不意味著它已過期。

1. 給 Ubuntu 的更新程式一些時間完成更新。

首先關閉所有其他已啟動的軟體包任務,例如其他終端命令、軟體更新程式或應用程式商店安裝程式。如果更新對話方塊已打開,請等待其完成,不要啟動第二個apt命令。在桌面版 Ubuntu 系統中,後台更新服務也可能正在運作。

檢查相關的 systemd 服務,如果某個服務正在運行,請等待一段時間:

systemctl status apt-daily.service apt-daily-upgrade.service

即使其他軟體包前端持有鎖,這些單元也可能處於非活動狀態,因此也請使用確切的鎖檢查進程。目前操作進行期間,請勿啟動更多安裝或升級指令。

Ubuntu 終端機顯示 apt 錯誤,提示 dpkg 前端鎖定被另一個程序持有。
鎖定訊息會指出正在使用的資源,並且可能包含要調查的進程 ID。

2. 確定誰掌握了前端鎖

用於fuser顯示正在存取鎖的進程,然後檢查它報告的任何 PID:

sudo fuser -v /var/lib/dpkg/lock-frontend
ps -fp 2468

請將 `<pid>`替換2468為輸出中的實際進程 ID。進程名稱如 `<pid>` apt、 `<進程名稱> apt-get`、dpkg`<進程名稱>` 或更新服務表示軟體包工作可能仍在進行中。如果需要查看更詳細的進程列表,請執行:

ps -eo pid,etime,cmd | grep -E '[a]pt|[d]pkg'

不要因為進程沒有明顯進展就斷定它已經凍結。軟體包下載、維護腳本和重啟服務都需要時間。如果您是在另一個終端機中啟動的更新,請返回該終端並等待其完成。如果更新是由圖形介面程式控制的,請使用程式取消或正常關閉更新。

終端輸出顯示來自 fuser 和 ps 的訊息,識別出一個 apt 流程及其 PID。
使用報告的 PID 和命令名稱來區分活動的更新程式和您嘗試執行的命令。

3. 謹慎處理真正卡住的操作。

如果該過程是自動更新,請在幹預之前檢查其狀態和日誌:

systemctl status apt-daily-upgrade.service
sudo journalctl -u apt-daily-upgrade.service -b --no-pager

當服務仍在運作時,請不要幹預。如果您發現某個軟體包命令是您自己啟動的,並且它明顯卡住了,請在該命令所在的終端機中使用 `npm run dev` 命令中斷它一次,Ctrl+C然後等待它返回 shell。請勿使用 `npm run dev` kill -9、killall dpkg`npm run build` 或刪除 `/etc/packages/` 目錄下的檔案/var/lib/dpkg;突然停止軟體包腳本可能會導致軟體包未打包但未配置。

如果進程已退出但軟體包操作中斷,重啟是清除孤立用戶空間工作的合理方法。重新啟動後,請確保沒有軟體更新程式或安裝任務正在運行,然後再繼續。如果某個服務重複卡住,請使用日誌輸出診斷該服務,而不是重複刪除鎖定檔案。

Ubuntu systemctl status 輸出顯示 apt-daily-upgrade.service 服務處於活動狀態,並且有一個 apt 程序正在運行。
如果 apt-daily-upgrade 服務處於活動狀態,則需要等待並檢查其進度,而不是解除其鎖定。

4. 鎖定解除後修復包狀態

一旦沒有軟體包管理器使用該鎖,請完成所有待處理的軟體包配置:

sudo dpkg --configure -a

此操作會配置已解壓縮但尚未完全安裝的軟體包。如果報告依賴關係問題,請聯絡 APT 解決這些問題:

sudo apt-get -f install

確認前請閱讀擬議的更改。故障排除期間請勿新增-y:提示資訊可讓您查看 APT 是否計劃進行意外的刪除或變更。修復完成後,刷新軟體包清單並重試原始任務:

sudo apt-get update
sudo apt-get install PACKAGE_NAME

請替換PACKAGE_NAME為您要安裝的軟體包。 Ubuntu 的APT-get 手冊將其記錄-f為修復損壞依賴關係的嘗試,而dpkg 手冊則解釋了軟體包配置操作。如果 APT 仍然報告鎖定,請重複進程檢查;在此期間可能已啟動了第二個軟體包安裝任務。

Ubuntu 終端機執行 dpkg configure 和 apt-get check 指令,然後回傳 shell。
釋放鎖定後,配置待處理的軟體包,並檢查 APT 是否可以讀取一致的軟體包狀態。

確認維修是否成功

sudo dpkg --configure -a當原始安裝或更新命令運行無鎖定錯誤、無待處理配置失敗退出且未報告任何損壞的依賴項時,修復即完成sudo apt-get check。如果鎖定再次出現,則表示另一個進程仍在取得該鎖定;請在採取進一步操作之前確定該進程。

Ubuntu 目前的 Noble 手冊描述了上述軟體包指令。特定的服務時序和程序名稱會因 Ubuntu 版本和安裝的桌面軟體包工具而異,但核心規則保持不變:等待鎖定所有者,如果先前的操作中斷,則修復 dpkg。

有關指令參考,請參閱Ubuntu 的 apt-get 手冊和Ubuntu 的 dpkg 手冊。

留下評論

使用 Systemd 定時器可靠地執行 ownCloud 後台作業

將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。

透過尋找故障路由來恢復 ownCloud WebDAV 同步

透過 Apache、Nginx 或反向代理程式追蹤 WebDAV 請求,然後使用經過驗證的 PROPFIND 測試確認 ownCloud 同步功能正常。

設定 Nextcloud 的公共 URL,以便它可以存取自身。

透過設定其規範 URL 並從伺服器本身檢查 DNS、HTTPS 和反向代理路由,修復 Nextcloud 缺少出站位址警告的問題。

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

透過本機 Unix 套接字配置 APCu 和 Redis,以實現 Nextcloud 快取和檔案鎖定,並提供目前和舊版 Nextcloud 的步驟。

使用 Systemd 定時器自動執行 Nextcloud Cron

檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。

使用 Redis 清除 Nextcloud 的檔案鎖定警告

啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。

如何才能獲得 Nextcloud A+ 安全評級

如何才能獲得 Nextcloud A+ 安全評級

使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。

啟用 Nextcloud 伺服器端加密,並評估其影響

為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。

將 Elasticsearch 全文搜尋功能新增至 Nextcloud

將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。

為 Nextcloud 已刪除檔案設定可靠的過期策略

為 Nextcloud 已刪除檔案設定可靠的過期策略

配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。