端末でコマンドを実行しapt-get
、ソフトウェアセンターに何かをインストールしたい場合は、センターはapt-get
完了するまで待つと言います。端末で同じことを行うことができるかどうか疑問に思います。つまり、apt-get
ロックが解除されるまでターミナルで待つことです。
私が見つけたこのリンク、aptdcon
ものをインストールするために使用されます。次のことを知りたいです。
- 本当に使えないのでしょうか
apt-get
? aptdcon
互換性がありますか?つまり、apt-get
システムを損傷せずにインストールするために両方を使用できますか?
答え1
apt
11.9.1
この問題は解決しましたDebian のバグ #754103存在する今回提出してください。この修正は、1.9.11に更新された適切なバージョンに適用されます。
- apt(8): ロック待機 (クローズ:#754103)
パラメータをまたはに設定して-o DPkg::Lock::Timeout=60
このオプションを有効にできます。ロックを待つ時間(秒)はどこにありますか?apt
apt-get
60
apt -o DPkg::Lock::Timeout=60 install FOO
apt-get -o DPkg::Lock::Timeout=60 install FOO
2つの同じコマンドを実行し、最初のコマンドにすぐに応答しないことでこれをテストできます。Do you want to continue? [Y/n]
? 2番目のコマンドを実行すると、次のメッセージが表示されます。
キャッシュロック待機中:ロックを取得できません
/var/lib/dpkg/lock-frontend
。プロセス 946299(apt) によって保持されます。
答え2
(次から再公開アクブンツ)
apt-get
他の適切なタスクが完了するのを待つオプションが組み込まれています。
DPkg::Lock::Timeout
apt-getコマンドのタイムアウトを秒単位で設定するには、このオプションを使用します。この例では、60秒待ちます。
sudo apt-get -o DPkg::Lock::Timeout=60 install packagename
値を-1に設定すると、永遠に待機します。
sudo apt-get -o DPkg::Lock::Timeout=-1 install packagename
詳細については、次を参照してください。ハッキングされたbashスクリプトを使用せずに適切なロックを待ちます。。このオプションはapt-get
2020年2月に追加されました。
答え3
すでに次の操作を実行できます。
apt-get(apt-getのラッパー)という新しいスクリプトを作成します。
/usr/ローカル/sbin
ディレクトリには、次のbashコードが含まれています。
#!/bin/bash
#Make sure there is no space before the hashbang above!
i=0
tput sc
while fuser /var/lib/dpkg/lock >/dev/null 2>&1 ; do
case $(($i % 4)) in
0 ) j="-" ;;
1 ) j="\\" ;;
2 ) j="|" ;;
3 ) j="/" ;;
esac
tput rc
echo -en "\r[$j] Waiting for other software managers to finish..."
sleep 0.5
((i=i+1))
done
/usr/bin/apt-get "$@"
実行可能にすることを忘れないでください。
sudo chmod +x /usr/local/sbin/apt-get
走る。シナプティックや他のapt-getを開いてもう一度実行してください。 ;)
/usr/local/sbin
ルートでより早く表示されます...
私の考えでは、これはどこかでスクリプトを台無しにすることができると思います...おそらく?
答え4
以前のバージョン(< 1.9.11)を使用している人にとっては、上記の方法が機能しない可能性があるため、ここに私のソリューションのハッキングバージョンがあります。
#!/bin/bash
timeout=12
wait_time=5
counter=0
while (( counter < timeout )); do
if sudo apt install jq -y 2>/dev/null; then
echo "jq installed successfully."
exit 0
else
echo "Installation failed. Waiting for other software managers to finish..."
sleep $wait_time
((counter++))
fi
done
echo "Could not install jq within $((timeout * wait_time)) seconds. Skipping installation."
これも縮小版ですね
for i in {1..12}; do sudo apt install jq -y && exit 0 || sleep 5; done