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
잠금 파일을 수동으로 제거해서는 안됩니다. 그들은 이유가 있습니다. 최후의 수단으로 만 사용하십시오. 먼저 패키지 관리를 사용하여 다른 응용 프로그램을 식별하고 닫으십시오.
gertvdijk

8
실제로 잠금 파일을 사용하는 프로세스가있는 경우 잠금 파일을 제거하는 대신 해당 프로세스를 종료하는 것이 좋습니다. 로 프로세스를 찾을 수 있어야합니다 lsof /var/lib/dpkg/lock.
Abe Voelker

Abe의 의견에 대한 강력한 +1. 열린 파일 디스크립터가있는 모든 프로세스를 종료하지 않고 잠금 파일을 제거하지 마십시오.
Pooyan Khosravi

1
@ Xen2050 IMO 새로운 답변은 불필요한 혼란을 추가합니다. 같은 일을 자동으로 수행하는 bash 스크립트를 사용할 수 있다고 생각하면 다른 답변으로 쓰겠습니다.
Pooyan Khosravi

1
현재로서는 이것이 최선의 대답입니다. 예, 실행중인 프로세스가 잠금을 소유하지 않도록하는 것이 매우 중요합니다. 나는 이미 확인했지만 아무것도 실행 중이 아니며 이전 잠금을 삭제하는 방법을 알아야했습니다. 이 답변은 모든 기반을 다룹니다.
Lambart

9

여러 패키지 응용 프로그램 / 명령 / 도구를 동시에 실행할 수 없습니다. 때로는 시냅틱, apt-get 또는 패키지 업데이트 도구가 backgroung에서 실행되고 있음을 의미합니다. 다른 패키지 도구를 닫거나 완료 될 때까지 기다리십시오. dpkg가 실행됩니다.


8

시도해 볼 수도 있습니다.

sudo apt-get install -f

손상된 패키지를 수정하려면 다음을 수행하십시오.

고치다; 종속성이 손상된 시스템을 수정하십시오. 이 옵션은 설치 / 제거와 함께 사용될 때 APT가 가능한 솔루션을 추론 할 수 있도록 모든 패키지를 생략 할 수 있습니다. 패키지가 지정되면 문제를 완전히 수정해야합니다. 이 옵션은 APT를 처음 실행할 때 가끔 필요합니다. APT 자체는 손상된 패키지 종속성이 시스템에 존재하지 않도록합니다. 시스템의 종속성 구조가 수동 개입 (일반적으로 문제가되는 일부 패키지를 사용 dselect(1)하거나 dpkg --remove제거함) 을 요구하도록 손상 될 수 있습니다 . 이 옵션을 -m과 함께 사용하면 일부 상황에서 오류가 발생할 수 있습니다. 구성 항목 : APT :: Get :: Fix-Broken.



1

한 가지 방법은 PC를 다시 시작하는 것입니다. 이것은 나를 위해 일했습니다.


0

업그레이드 프로세스가 중단 된 경우 (연결이 끊어진 것처럼) 발생할 수 있습니다. 화면을 루트 ( sudo su)로 사용하여 세션으로 돌아갈 수 있습니다 .

screen -r

0

여기에 좋은 답변이 있지만 dpkg 잠금 사용자를 찾는 lsof가 아닌 방법을 추가하고 싶었습니다.

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.