私のシステムログを見ると、次のメッセージが表示されます/var/log/messages
。
Sep 2 15:29:15 <myhostname> systemd[1]: Requested transaction contradicts existing jobs: File exists
私の質問はこのエラーをどのように解決しますか?これが何を意味するのか、原因は何であるのか、心配する価値があるのか、それで問題を解決する方法を理解するためにどのような措置を講じるべきですか?
そして、「要求されたトランザクションが既存のタスクと競合しています」というメッセージはどういう意味ですか?概念的な背景が足りないようです。とにかく、このエラーメッセージは、このエラーメッセージの原因を診断し、原因を理解するための次のステップの候補を示唆していますか?
私はsystemdドキュメントを読んだがこれには役に立たないと思います。何を探すべきかに関する一般的なガイドがあれば良いでしょう。 「…既存の作業と矛盾する」情報を経験した他の人にも役立つと思います。
答え1
トラブルシューティングのためにこのエラーに関する詳細情報を取得するには、まず次のコマンドを実行します。
$ journalctl -ab
これにより、systemdログからいくつかの詳細なログがダンプされます。
また、このエラーの直前に、どのサービスに問題があるかを知らせる別のエラーがあるかもしれません。また、サービスを診断してみてください(例:Firewalld)。
$ systemctl status firewalld.service
具体的には、次の行はトランザクションをアクティブ化するためのシステムコードから得られます。
http://cgit.freedesktop.org/systemd/systemd/commit/?id=75778e21dfeee51036d24501e39ea7398fabe502
特にsystemdトランザクションの場合(man systemdで):
systemd has a minimal transaction system: if a unit is requested to start up
or shut down it will add it and all its dependencies to a temporary
transaction. Then, it will verify if the transaction is consistent (i.e.
whether the ordering of all units is cycle-free). If it is not, systemd will
try to fix it up, and removes non-essential jobs from the transaction that
might remove the loop. Also, systemd tries to suppress non-essential jobs in
the transaction that would stop a running service. Finally it is checked
whether the jobs of the transaction contradict jobs that have already been
queued, and optionally the transaction is aborted then. If all worked out and
the transaction is consistent and minimized in its impact it is merged with
all already outstanding jobs and added to the run queue. Effectively this
means that before executing a requested operation, systemd will verify that
it makes sense, fixing it if possible, and only failing if it really cannot
work.
したがって、これらすべてをまとめると、起動しようとしているログエントリの近くに他のエントリがありますが、すでにクリーンアップする必要があるロックファイル(おそらく古い)があるようです。