dpkg:エラー:dpkg status database is locked by another process


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 手動で実行するにはどうすればよいですか?


このマシンは重要ですか、つまり、再起動できますか?この本当のクイックを解決する必要があります
ハックル

回答:


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です。
安倍Voelker

安倍のコメントに対する強い+1。開いているファイル記述子を持つすべてのプロセスを強制終了せずにロックファイルを削除しないでください。
プーヤンKhosravi

1
@ Xen2050 IMOの新しい答えは、不要な混乱を追加します。同じことを自動的に行うbashスクリプトが使用できると思われる場合は、別の答えとして書きます。
プーヤンKhosravi

1
今のところ、これが間違いなく最良の答えです。はい、実行中のプロセスがロックを所有していないことを確認することが非常に重要です。私はすでにそれをチェックしていましたが、何も実行されていませんでした。古いロックを削除する方法を知る必要がありました。この答えはすべての基盤を網羅しています。
ランバート

9

複数のパッケージアプリケーション/コマンド/ツールを同時に実行することはできません。場合によっては、シナプス、apt-get、またはパッケージ更新ツールがバックグラウンドで実行されていることを意味します。他のパッケージツールを閉じるか、終了するのを待ちます。そして、dpkgが実行されます。


8

試すこともできます:

sudo apt-get install -f

破損したパッケージを修正するには:

修正; 破損した依存関係が存在するシステムを修正しようとします。このオプションをinstall / removeとともに使用すると、パッケージを省略して、APTが解決策を推測できるようにすることができます。パッケージが指定されている場合、これらは問題を完全に修正する必要があります。このオプションは、APTを初めて実行するときに必要になる場合があります。APT自体は、壊れたパッケージの依存関係がシステムに存在することを許可しません。システムの依存関係構造が非常に破損している可能性があり、手動での介入が必要になる場合があります(通常、問題のあるパッケージの使用dselect(1)またはdpkg --remove排除を意味します)。このオプションを-mとともに使用すると、状況によってはエラーが発生する場合があります。構成アイテム:APT :: Get :: Fix-Broken。



1

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.