【Linux】「systemd[1]:dnf-makecache.service: Failed with result ‘exit-code’.」を解消する方法

dnf-makecache.service Failed解消する方法
目次

対象

以下のようなことがしたい場合に役立ちます。

  • dnf-makecache.service のエラーメッセージを解消したい
  • 定期的なdnfのエラーメッセージが何か知りたい

該当メッセージについて

サーバの環境によっては、以下のようなエラーメッセージが定期的に発生する場合があります。

# cat /var/log/messages
Dec 23 01:02:26 SRV01 daemon.info: dnf[1749]:サブスクリプション管理リポジトリーを更新しています。
Dec 23 01:02:26 SRV01 daemon.info: dnf[1749]:コンシューマー識別子を読み込めません
Dec 23 01:02:26 SRV01 daemon.info: dnf[1749]:このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。
Dec 23 01:02:26 SRV01 daemon.info: dnf[1749]:最後の makecache 時間の決定に失敗しました。
Dec 23 01:02:26 SRV01 daemon.info: dnf[1749]:Red Hat Enterprise Linux 9 - BaseOS             0.0  B/s |   0  B     00:00
Dec 23 01:02:26 SRV01 daemon.info: dnf[1749]:Errors during downloading metadata for repository 'BaseOS':
Dec 23 01:02:26 SRV01 daemon.info: dnf[1749]:  - Curl error (37): Couldn't read a file:// file for file:///mnt/rhel_media/BaseOS/repodata/repomd.xml [Couldn't open file /mnt/rhel_media/BaseOS/repodata/repomd.xml]
Dec 23 01:02:26 SRV01 daemon.info: dnf[1749]:エラー: repo 'BaseOS' のメタデータのダウンロードに失敗しました : Cannot download repomd.xml: Curl error (37): Couldn't read a file:// file for file:///mnt/rhel_media/BaseOS/repodata/repomd.xml [Couldn't open file /mnt/rhel_media/BaseOS/repodata/repomd.xml]
Dec 23 01:02:26 SRV01 daemon.notice: systemd[1]:dnf-makecache.service: Main process exited, code=exited, status=1/FAILURE
Dec 23 01:02:26 SRV01 daemon.warning: systemd[1]:dnf-makecache.service: Failed with result 'exit-code'.
Dec 23 01:02:26 SRV01 daemon.err: systemd[1]:Failed to start dnf makecache.

デフォルトの設定では、システムは定期的にdnf(yum)リポジトリーに定義された内容に従い、
メタデータをダウンロードしにいこうとします。
そして、ダウンロードができない場合に該当のメッセージが出力されます。

該当のエラーメッセージを発生させなくする方法

パターン1 メタデータの自動同期を完全に無効にする

メタデータの自動同期を完全に無効にするには/etc/dnf/dnf.confの定義を変更する必要があります。
man dnf.confコマンドでパラメータに関する情報が確認できます。
パラメータ名「metadata_timer_sync」の部分に「メタデータの自動同期を完全に無効にするには0を使用します。」と記載されています。

<man dnf.conf の抜粋>
metadata_timer_sync
 time in seconds
 The minimal period between two consecutive makecache timer runs.
 The command will stop immediately if it’s less than this time period since its last run.
 Does not affect simple makecache run.
 Use 0 to completely disable automatic metadata syn‐chronizing.
 The default corresponds to three hours. The value is rounded to the next commen

なので、vi /etc/dnf/dnf.confコマンドを実行し、
metadata_timer_sync=0」を追加することで、このエラーは解消されます。

# vi /etc/dnf/dnf.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
metadata_timer_sync=0

ちなみに設定変更後は、以下のようにエラーメッセージは発生しなくなります。

# cat /var/log/messages
Dec 23 01:37:48 SRV01 daemon.info: dnf[1705]:サブスクリプション管理リポジトリーを更新しています。
Dec 23 01:37:48 SRV01 daemon.info: dnf[1705]:コンシューマー識別子を読み込めません
Dec 23 01:37:48 SRV01 daemon.info: dnf[1705]:このシステムは、エンタイトルメントサーバーに登録されていません。subscription-manager で登録できます。
Dec 23 01:37:48 SRV01 daemon.info: dnf[1705]:メタデータタイマーキャッシュは無効化されました。
Dec 23 01:37:48 SRV01 daemon.info: systemd[1]:dnf-makecache.service: Deactivated successfully.
Dec 23 01:37:48 SRV01 daemon.info: systemd[1]:Finished dnf makecache.

パターン2 dnf-makecache.timerを停止する

メタデータの自動同期の機能を停止させるのではなく、
メタデータの自動同期を行っているサービス「dnf-makecache.service」自体を実行させないようにします。
「dnf-makecache.service」は「dnf-makecache.timer」というtimerによって定期的に実行されています。
つまり、このtimer自体を停止させることで、メタデータの自動同期が実行されなくなり、エラーメッセージは発生しなくなります。

なので、systemctl disable dnf-makecache.timerコマンドで自動起動を停止させ、
現在起動しているtimerを停止することで、エラーメッセージは発生しなくなります。

# systemctl disable dnf-makecache.timer
Removed "/etc/systemd/system/timers.target.wants/dnf-makecache.timer".

# systemctl is-enabled dnf-makecache.timer
disabled

# systemctl is-active dnf-makecache.timer
active

# systemctl stop dnf-makecache.timer

# systemctl is-active dnf-makecache.timer
inactive
よかったらシェアしてね!
  • URLをコピーしました!
目次