いくつかのインストールを含む新しい仮想マシンを設定するためのスクリプトを作成しようとしていますが、インストールコマンド(apt-get --yes install <package>
)をスクリプトに入れると常に失敗します。
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
sudo ./setup.sh
スクリプトはルート()として実行されます。
apt
プロセスを確認すると、次のような結果が得られます。
4 S root 2227 1 0 80 0 - 1126 - 07:33 ? 00:00:00 /bin/sh /usr/lib/apt/apt.systemd.daily update
0 S root 2231 2227 0 80 0 - 1126 - 07:33 ? 00:00:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held update
問題は、これがスクリプトでaptsを実行したときにのみ発生することです。同じコマンドを手動で実行すると、この問題は発生しません。シェルスクリプトはapt installを別々に実行しますか?
apt
とにかく、インストーラをロックせずyum
にシェルスクリプトでインストーラを実行する最良の方法は何ですか?
答え1
sudo apt-get install <package> -y
スクリプトに書き込む必要があります。スクリプトの実行./setup.sh
しかし、もちろん、ユーザーはsudoer(sudoアクセス)でなければなりません。
答え2
これは、インストール後にbashスクリプトをさらに実行するか、これらのプロセス名が存在しなくなるまで待つ必要があることを示します(aptはロックを取得できません)。あなたはそれについて悪意のあるプロセスを終了し、ロックファイルを削除してから、更新が適切に受け取られるか完了するまで待つことができます。
失敗を引き起こす可能性がある - apt-getを実行すると、他のパッケージをインストールするときに何かをインストールします(そうしないで依存関係を使用してください)。