dpkg: error: 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
एक को मैन्युअल रूप से लॉकफाइल्स को कभी नहीं निकालना चाहिए। वे वहाँ एक कारण के लिए कर रहे हैं। कृपया, इसे केवल बहुत अंतिम उपाय के रूप में उपयोग करें। पहले पैकेज प्रबंधन का उपयोग करके अन्य अनुप्रयोगों को पहचानने और बंद करने का प्रयास करें।
gertvdijk

8
अगर वास्तव में लॉक फ़ाइल का उपयोग करने वाली कोई प्रक्रिया है, तो लॉक फ़ाइल को हटाने के बजाय उस प्रक्रिया को मारना बेहतर होगा। आप के साथ प्रक्रिया खोजने में सक्षम होना चाहिए lsof /var/lib/dpkg/lock
अबे वोल्कर

अबे की टिप्पणी के लिए एक मजबूत +1। उन सभी प्रक्रियाओं को मारे बिना कभी भी लॉकफाइल को न हटाएं जिनके पास खुली फाइल के विवरण हैं।
पूयण खोसरावी २०'१५ को

1
@ Xen2050 IMO एक नया उत्तर अनावश्यक अव्यवस्था जोड़ता है। अगर आपको लगता है कि एक बैश स्क्रिप्ट जो एक ही काम करती है, तो अपने आप ही प्रयोग करने योग्य है, मैं इसे दूसरे उत्तर के रूप में लिखूंगा।
पूयण खोसरावी २०'१५ को os:

1
जैसा कि अब यह खड़ा है, यह निश्चित रूप से सबसे अच्छा जवाब है। हां, यह सुनिश्चित करना बहुत महत्वपूर्ण है कि कोई भी चलने वाली प्रक्रिया लॉक का मालिक नहीं है। मैंने पहले ही जाँच कर ली थी कि कुछ भी नहीं चल रहा है, और मुझे यह जानने की जरूरत है कि पुराने लॉक को कैसे हटाया जाए। इस उत्तर में सभी आधार शामिल हैं।
लैम्बर्ट

9

आप एक ही समय में कई पैकेज एप्लिकेशन / कमांड / टूल नहीं चला सकते हैं। कभी-कभी, इसका अर्थ है कि बैकग्रॉन्ग में synaptic, apt-get या पैकेज अपडेट टूल चल रहा है। बस अन्य पैकेज टूल बंद करें, या उनके समाप्त होने की प्रतीक्षा करें। और dpkg चलेगा।


8

एक भी कोशिश कर सकता है:

sudo apt-get install -f

किसी भी टूटे हुए पैकेज को ठीक करने के लिए:

ठीक कर; जगह में टूटी हुई निर्भरता के साथ एक प्रणाली को सही करने का प्रयास। यह विकल्प, जब इंस्टॉल / हटाने के साथ उपयोग किया जाता है, तो एपीटी को एक संभावित समाधान निकालने के लिए अनुमति देने के लिए किसी भी पैकेज को छोड़ दिया जा सकता है। यदि पैकेज निर्दिष्ट किए जाते हैं, तो समस्या को पूरी तरह से ठीक करना होगा। पहली बार APT चलाते समय विकल्प कभी-कभी आवश्यक होता है; APT स्वयं किसी सिस्टम पर टूटे हुए पैकेज निर्भरता को मौजूद नहीं होने देता है। यह संभव है कि एक प्रणाली की निर्भरता संरचना इतनी भ्रष्ट हो सकती है कि मैनुअल हस्तक्षेप की आवश्यकता होती है (जिसका अर्थ है आमतौर पर उपयोग करने dselect(1)या dpkg --removeकुछ आक्रामक पैकेजों को खत्म करना)। -M के साथ मिलकर इस विकल्प का उपयोग कुछ स्थितियों में त्रुटि उत्पन्न कर सकता है। कॉन्फ़िगरेशन आइटम: APT :: Get :: Fix-Broken।



1

एक दृष्टिकोण सिर्फ पीसी को पुनरारंभ करने के लिए है। इसने मेरे लिए काम किया।


0

यह तब हो सकता है जब उन्नयन प्रक्रिया बाधित हो गई थी (जैसे कि आप कनेक्शन खो गए थे)। आप sudo suसत्र में वापस आने के लिए स्क्रीन को रूट ( ) के रूप में उपयोग करने का प्रयास कर सकते हैं ।

screen -r

0

यहाँ कुछ अच्छे उत्तर हैं, लेकिन केवल dpkg लॉक उपयोगकर्ता को खोजने का एक गैर-lsof तरीका जोड़ना चाहते हैं

चरण 1: पता लगाएँ कि कौन dpkg लॉक कर रहा है:

विकल्प # 1: lsof का उपयोग करना (हमेशा मशीन पर स्थापित नहीं)

lsof /var/lib/dpkg/lock

विकल्प # 2: बैश का उपयोग करना

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

हमारे मामले में कोई चल रही प्रक्रिया (पीआईडी) नहीं थी इसलिए मैंने वीपीएस को रोक दिया और रिबूट किया।

अगला, कई लॉक फाइलें हैं जिन्हें हटाने की आवश्यकता हो सकती है:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.