dpkg: error: cơ sở dữ liệu trạng thái dpkg bị khóa bởi một quá trình khác


68

Tôi chỉ tự hỏi nếu ai đó có thể cho tôi biết điều này có nghĩa là gì:

E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
reidsr@ubuntu:~$ sudo dpkg --configure -a
dpkg: error: dpkg status database is locked by another process
reidsr@ubuntu:~$ 

Làm thế nào để tôi chạy sudo dpkg --configure -a thủ công?


Là máy này quan trọng, có nghĩa là, bạn có thể khởi động lại nó? Nên giải quyết vấn đề này thật nhanh
Huckle

Câu trả lời:


94

Lần chạy đầu tiên:

lsof /var/lib/dpkg/lock

Sau đó, đảm bảo rằng quy trình không chạy:

ps cax | grep PID

Nếu nó đang chạy:

kill PID
#wait
kill -9 PID

Đảm bảo quá trình được thực hiện:

ps cax | grep PID

Sau đó xóa tệp khóa:

sudo rm /var/lib/dpkg/lock

Hãy để dpkg tự sửa:

sudo dpkg --configure -a

Bạn sẽ ổn sau đó :)


7
Không bao giờ nên gỡ bỏ lockfiles bằng tay. Họ ở đó vì một lý do. Xin vui lòng, chỉ sử dụng điều này như là một phương sách cuối cùng. Trước tiên hãy thử xác định và đóng các ứng dụng khác bằng cách sử dụng gói quản lý.
gertvdijk

8
Nếu có một quá trình thực sự sử dụng tệp khóa, có lẽ tốt hơn là giết quá trình đó thay vì chỉ xóa tệp khóa. Bạn sẽ có thể tìm thấy quá trình với lsof /var/lib/dpkg/lock.
Abe Voelker

+1 mạnh mẽ cho nhận xét của Abe. Không bao giờ xóa tệp khóa mà không giết tất cả các quy trình có mô tả tệp mở cho nó.
Pooyan Khosravi

1
@ Xen2050 IMO một câu trả lời mới thêm lộn xộn không cần thiết. Nếu bạn nghĩ rằng một tập lệnh bash tự động thực hiện điều tương tự có thể sử dụng được thì tôi sẽ viết nó như một câu trả lời khác.
Pooyan Khosravi

1
Hiện tại, đây chắc chắn là câu trả lời tốt nhất. Có, điều rất quan trọng để đảm bảo không có quá trình chạy sở hữu khóa. Tôi đã kiểm tra xem, không có gì đang chạy và tôi cần biết cách xóa khóa cũ. Câu trả lời này bao gồm tất cả các cơ sở.
Lambart

9

Bạn không thể chạy một số gói ứng dụng / lệnh / công cụ cùng một lúc. Đôi khi, điều đó có nghĩa là synaptic, apt-get hoặc công cụ cập nhật gói đang chạy trong backgroung. Chỉ cần đóng các công cụ gói khác, hoặc đợi chúng kết thúc. Và dpkg sẽ chạy.


8

Ai cũng có thể thử:

sudo apt-get install -f

Để khắc phục bất kỳ gói bị hỏng:

Sửa chữa; cố gắng sửa một hệ thống với các phụ thuộc bị hỏng tại chỗ. Tùy chọn này, khi được sử dụng với cài đặt / gỡ bỏ, có thể bỏ qua bất kỳ gói nào để cho phép APT suy ra một giải pháp có khả năng. Nếu các gói được chỉ định, chúng phải khắc phục hoàn toàn vấn đề. Tùy chọn đôi khi cần thiết khi chạy APT lần đầu tiên; Bản thân APT không cho phép các phụ thuộc gói bị hỏng tồn tại trên một hệ thống. Có thể cấu trúc phụ thuộc của hệ thống có thể bị hỏng đến mức phải yêu cầu can thiệp thủ công (điều này thường có nghĩa là sử dụng dselect(1)hoặc dpkg --removeloại bỏ một số gói vi phạm). Việc sử dụng tùy chọn này cùng với -m có thể tạo ra lỗi trong một số trường hợp. Mục cấu hình: APT :: Get :: Fix-Broken.



1

Một cách tiếp cận là khởi động lại PC. Điều này làm việc cho tôi.


0

Điều này có thể xảy ra nếu quá trình nâng cấp bị gián đoạn (như kết nối của bạn bị mất). Bạn có thể thử sử dụng màn hình với quyền root ( sudo su) để quay lại phiên.

screen -r

0

Có một số câu trả lời hay ở đây, nhưng chỉ muốn thêm một phương pháp không phải là lsof để tìm người dùng khóa dpkg

Bước 1: Tìm hiểu ai đang khóa dpkg:

Tùy chọn # 1: Sử dụng lsof (không phải lúc nào cũng được cài đặt trên máy)

lsof /var/lib/dpkg/lock

Tùy chọn # 2: Sử dụng bash

for pid in $(ls /proc | egrep [0-9]+); do sudo ls -l /proc/$pid/fd 2>/dev/null | grep /var/lib/dpkg/lock && echo $pid; done

Bước 2: Quyết định những gì bạn muốn làm với người dùng dpkg hiện tại

Nếu không có quá trình như vậy, không có gì để quyết định, chỉ cần bỏ qua bước tiếp theo.

Nếu không, bạn phải quyết định nếu bạn muốn giết quá trình hoặc để nó kết thúc một cách duyên dáng. Nếu bạn quyết định giết nó, chỉ cần sử dụng kill <pid>. Nếu quy trình vẫn không chết, bạn có thể cân nhắc việc giết nó bằng cách sử dụng kill -9 <pid>, nhưng nó có thể tạo ra những mâu thuẫn nhất định và tôi khuyên bạn nên chống lại nó trừ khi bạn biết bạn đang làm gì.

Bước 3: Xóa tệp khóa

sudo rm /var/lib/dpkg/lock

Bước 4: Khắc phục trạng thái nội bộ dpkg

sudo dpkg --configure -a


0

Trong trường hợp của chúng tôi không có quá trình chạy (PID) nên tôi đã dừng lại và khởi động lại VPS.

Tiếp theo, có một số tệp khóa có thể cần phải xóa:

sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/cache/apt/archives/lock

Sau đó, bạn có thể khắc phục dpkgtheo đề xuất:

sudo apt update
sudo dpkg --configure -a
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.