dpkg: ข้อผิดพลาด: ฐานข้อมูลสถานะ dpkg ถูกล็อคโดยกระบวนการอื่น


68

ฉันแค่สงสัยว่าใครบางคนสามารถบอกฉันได้ว่าสิ่งนี้หมายความว่า:

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

ฉันจะรันsudo dpkg --configure -a ด้วยตนเองได้อย่างไร


เครื่องนี้สำคัญไหมที่จะบอกว่าคุณสามารถรีบูทเครื่องนี้ได้หรือไม่? ควรแก้ไขปัญหานี้อย่างรวดเร็วจริง ๆ
Huckle

คำตอบ:


94

วิ่งครั้งแรก:

lsof /var/lib/dpkg/lock

จากนั้นตรวจสอบให้แน่ใจว่ากระบวนการไม่ทำงาน:

ps cax | grep PID

ถ้ามันกำลังทำงาน:

kill PID
#wait
kill -9 PID

ทำให้แน่ใจว่ากระบวนการเสร็จสมบูรณ์แล้ว:

ps cax | grep PID

จากนั้นลบไฟล์ล็อค:

sudo rm /var/lib/dpkg/lock

ให้ dpkg แก้ไขเอง:

sudo dpkg --configure -a

คุณควรจะสบายดีในภายหลัง :)


7
หนึ่งไม่ควรลบ lockfiles ด้วยตนเอง พวกเขาอยู่ที่นั่นด้วยเหตุผล กรุณาใช้สิ่งนี้เป็นทางเลือกสุดท้ายเท่านั้น ก่อนอื่นให้ลองระบุและปิดแอปพลิเคชันอื่นโดยใช้การจัดการบรรจุภัณฑ์
gertvdijk

8
หากมีกระบวนการที่ใช้ล็อกไฟล์จริง ๆ น่าจะดีกว่าที่จะฆ่ากระบวนการนั้นแทนที่จะลบไฟล์ล็อคออก lsof /var/lib/dpkg/lockคุณควรจะสามารถที่จะหากระบวนการที่มี
Abe Voelker

+1 ที่แข็งแกร่งสำหรับความคิดเห็นของ Abe อย่าลบ lockfile โดยไม่ฆ่ากระบวนการทั้งหมดที่มี file descriptors เปิดอยู่
Pooyan Khosravi

1
@ Xen2050 IMO คำตอบใหม่เพิ่มความยุ่งเหยิงที่ไม่จำเป็น หากคุณคิดว่าสคริปต์ทุบตีที่ทำสิ่งเดียวกันโดยอัตโนมัติสามารถใช้งานได้ฉันจะเขียนมันเป็นคำตอบอื่น
Pooyan Khosravi

1
นี่คือคำตอบที่ดีที่สุดอย่างแน่นอน ใช่มันเป็นสิ่งสำคัญมากเพื่อให้แน่ใจว่าไม่มีกระบวนการใดที่จะเป็นเจ้าของล็อค ฉันได้ตรวจสอบแล้วว่าไม่มีอะไรทำงานและฉันต้องรู้วิธีลบล็อคเก่า คำตอบนี้ครอบคลุมฐานทั้งหมด
Lambart

9

คุณไม่สามารถเรียกใช้แอปพลิเคชั่น / คำสั่ง / เครื่องมือหลายแพ็คเกจพร้อมกันได้ บางครั้งก็หมายความว่าเครื่องมือ synaptic, apt-get หรือ package update กำลังทำงานในแบ็กกราวด์ เพียงแค่ปิดเครื่องมือแพ็คเกจอื่น ๆ หรือรอให้เสร็จ และ dpkg จะทำงาน


8

หนึ่งสามารถลอง:

sudo apt-get install -f

วิธีแก้ไขแพ็คเกจที่เสียหาย:

แก้ไข; พยายามแก้ไขระบบที่มีการพึ่งพาที่ขาด ตัวเลือกนี้เมื่อใช้กับการติดตั้ง / ลบสามารถละเว้นแพ็คเกจใด ๆ เพื่ออนุญาตให้ APT อนุมานโซลูชันที่น่าจะเป็นได้ หากระบุแพ็กเกจสิ่งเหล่านี้ต้องแก้ไขปัญหาโดยสมบูรณ์ บางครั้งจำเป็นต้องใช้ตัวเลือกเมื่อเรียกใช้ APT เป็นครั้งแรก APT เองไม่อนุญาตให้มีการขึ้นต่อกันของแพ็กเกจที่เสียหายบนระบบ มีความเป็นไปได้ที่โครงสร้างการพึ่งพาของระบบอาจเสียหายจนต้องใช้การแทรกแซงด้วยตนเอง (ซึ่งโดยปกติจะหมายถึงการใช้dselect(1)หรือdpkg --removeกำจัดแพ็คเกจที่ละเมิด การใช้ตัวเลือกนี้ร่วมกับ -m อาจทำให้เกิดข้อผิดพลาดในบางสถานการณ์ รายการการกำหนดค่า: APT :: Get :: Fix-Broken




0

กรณีนี้อาจเกิดขึ้นได้หากกระบวนการอัปเกรดถูกขัดจังหวะ (เช่นคุณขาดการเชื่อมต่อ) คุณสามารถลองใช้หน้าจอเป็น root ( sudo su) เพื่อกลับเข้าสู่เซสชัน

screen -r

0

มีคำตอบที่ดีอยู่ที่นี่ แต่ต้องการเพิ่มวิธีการที่ไม่ใช่ lsof ในการค้นหาผู้ใช้ล็อค dpkg

ขั้นตอนที่ 1: ค้นหาว่าใครกำลังล็อก dpkg:

ตัวเลือก # 1: การใช้ lsof (ไม่ได้ติดตั้งบนเครื่องเสมอ)

lsof /var/lib/dpkg/lock

ตัวเลือก # 2: การใช้ 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

ขั้นตอนที่ 2: ตัดสินใจว่าคุณต้องการทำอะไรกับผู้ใช้ dpkg ปัจจุบัน

หากไม่มีกระบวนการดังกล่าวไม่มีอะไรที่ต้องตัดสินใจเพียงข้ามไปยังขั้นตอนถัดไป

มิฉะนั้นคุณต้องตัดสินใจว่าคุณต้องการที่จะฆ่ากระบวนการหรือปล่อยให้มันเสร็จอย่างสง่างาม kill <pid>หากคุณตัดสินใจที่จะฆ่ามันเพียงแค่ใช้ หากกระบวนการยังคงไม่ตายคุณสามารถลองฆ่ามันโดยใช้kill -9 <pid>แต่มันอาจสร้างความไม่แน่นอนบางอย่างขึ้นมาและฉันแนะนำให้ทำอย่างนั้นถ้าคุณไม่ทราบว่าคุณกำลังทำอะไรอยู่

ขั้นตอนที่ 3: ลบไฟล์ล็อค

sudo rm /var/lib/dpkg/lock

ขั้นตอนที่ 4: แก้ไขสถานะภายใน dpkg

sudo dpkg --configure -a


0

ในกรณีของเราไม่มีกระบวนการทำงาน (PID) ดังนั้นฉันจึงหยุดและเริ่มต้น VPS ใหม่

ถัดไปมีไฟล์ล็อคหลายไฟล์ที่อาจต้องลบออก:

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

จากนั้นคุณสามารถแก้ไขdpkgตามที่แนะนำ:

sudo apt update
sudo dpkg --configure -a
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.