dpkg: error: database status dpkg dikunci oleh proses lain

69

Saya hanya ingin tahu apakah seseorang dapat memberi tahu saya apa artinya ini:

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:~$ 

Bagaimana saya menjalankan sudo dpkg --configure -a secara manual?

Reidar
sumber
Apakah mesin ini penting, artinya, dapatkah Anda reboot? Harus menyelesaikan ini sangat cepat
Huckle

Jawaban:

95

Lari pertama:

lsof /var/lib/dpkg/lock

Kemudian pastikan proses itu tidak berjalan:

ps cax | grep PID

Jika sedang berjalan:

kill PID
#wait
kill -9 PID

Pastikan proses selesai:

ps cax | grep PID

Kemudian hapus file kunci:

sudo rm /var/lib/dpkg/lock

Biarkan dpkg memperbaiki sendiri:

sudo dpkg --configure -a

Anda harus baik-baik saja setelahnya :)

pembantu
sumber
7
Seseorang seharusnya tidak pernah menghapus file kunci secara manual. Mereka ada di sana karena suatu alasan. Tolong, hanya gunakan ini sebagai pilihan terakhir. Pertama-tama cobalah untuk mengidentifikasi dan menutup aplikasi lain menggunakan manajemen paket.
gertvdijk
8
Jika ada proses yang benar-benar menggunakan file kunci, mungkin akan lebih baik untuk menghentikan proses itu daripada hanya menghapus file kunci. Anda harus dapat menemukan prosesnya dengan lsof /var/lib/dpkg/lock.
Abe Voelker
+1 yang kuat untuk komentar Abe. Jangan pernah menghapus file kunci tanpa membunuh semua proses yang memiliki deskriptor file terbuka untuk itu.
Pooyan Khosravi
1
@ Xen2050 IMO jawaban baru menambahkan kekacauan yang tidak perlu. Jika menurut Anda skrip bash yang melakukan hal yang sama secara otomatis dapat digunakan, saya akan menuliskannya sebagai jawaban lain.
Pooyan Khosravi
1
Seperti yang ada sekarang, ini jelas merupakan jawaban terbaik. Ya, sangat penting untuk memastikan tidak ada proses yang berjalan yang memiliki kunci. Saya sudah memeriksa itu, tidak ada yang berjalan, dan saya perlu tahu cara menghapus kunci lama. Jawaban ini mencakup semua basis.
Lambart
9

Anda tidak dapat menjalankan beberapa paket aplikasi / perintah / alat secara bersamaan. Kadang-kadang, itu berarti bahwa synaptic, apt-get atau alat pembaruan paket sedang berjalan di backgroung. Tutup saja alat paket lain, atau tunggu sampai selesai. Dan dpkg akan berjalan.

totoine
sumber
8

Seseorang juga dapat mencoba:

sudo apt-get install -f

Untuk memperbaiki paket yang rusak:

Memperbaiki; mencoba untuk memperbaiki sistem dengan dependensi yang rusak di tempat. Opsi ini, ketika digunakan dengan menginstal / menghapus, dapat menghilangkan paket apa pun untuk mengizinkan APT menyimpulkan solusi yang mungkin. Jika paket ditentukan, ini harus sepenuhnya memperbaiki masalah. Opsi ini kadang-kadang diperlukan ketika menjalankan APT untuk pertama kalinya; APT sendiri tidak memungkinkan dependensi paket yang rusak ada pada suatu sistem. Ada kemungkinan bahwa struktur ketergantungan sistem dapat sedemikian korup sehingga memerlukan intervensi manual (yang biasanya berarti menggunakan dselect(1)atau dpkg --removemenghilangkan beberapa paket yang menyinggung). Penggunaan opsi ini bersama -m dapat menghasilkan kesalahan dalam beberapa situasi. Item Konfigurasi: APT :: Get :: Perbaiki-Rusak.

blade19899
sumber
3

Yang berikut harus membantu:

sudo rm /var/lib/dpkg/lock

sudo dpkg --configure -a
Deepak Singhvi
sumber
Terima kasih, ini bekerja untuk saya
Thavaprakash Swaminathan
1

Salah satu pendekatannya adalah hanya me-restart PC. Ini berhasil untuk saya.

princebillyGK
sumber
0

Ini dapat terjadi jika proses pemutakhiran terputus (seperti koneksi Anda terputus). Anda dapat mencoba menggunakan layar sebagai root ( sudo su) untuk kembali ke sesi.

screen -r
Xeoncross
sumber
0

Ada beberapa jawaban yang bagus di sini, tetapi hanya ingin menambahkan metode non-lsof untuk menemukan pengguna kunci dpkg

Langkah 1: Cari tahu siapa yang mengunci dpkg:

Opsi # 1: Menggunakan lsof (tidak selalu diinstal pada mesin)

lsof /var/lib/dpkg/lock

Opsi # 2: Menggunakan 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

Langkah 2: Putuskan apa yang ingin Anda lakukan dengan pengguna dpkg saat ini

Jika tidak ada proses seperti itu, tidak ada yang perlu diputuskan, langsung saja ke langkah selanjutnya.

Jika tidak, Anda harus memutuskan apakah Anda ingin mematikan proses atau membiarkannya selesai dengan anggun. Jika Anda memutuskan untuk membunuhnya, gunakan saja kill <pid>. Jika prosesnya masih belum mati, Anda dapat mempertimbangkan untuk membunuhnya menggunakan kill -9 <pid>, tetapi itu mungkin menciptakan inkonsistensi tertentu dan saya menyarankan untuk tidak melakukannya kecuali Anda tahu apa yang Anda lakukan.

Langkah 3: Hapus file kunci

sudo rm /var/lib/dpkg/lock

Langkah 4: Perbaiki keadaan internal dpkg

sudo dpkg --configure -a

Daniel Trugman
sumber
0

Dalam kasus kami tidak ada proses yang berjalan (PID) jadi saya berhenti dan mem-boot ulang VPS.

Berikutnya, ada beberapa file kunci yang mungkin perlu dihapus:

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

Kemudian Anda dapat memperbaikinya dpkgseperti yang disarankan:

sudo apt update
sudo dpkg --configure -a
jessuppi
sumber
Untuk apa file kunci?
jarno