依存関係エラーが発生するのはなぜですか?私は何を実行するかを指定せず、以前に実行する項目のみを指定しました。しかし、依存関係のサイクルがあります。
systemdにサービスを追加しようとしましたが、ソートエラーが発生しました。
エラーメッセージ
から抜粋/var/log/boot.log
[ SKIP ] Ordering cycle found, skipping local-fs-pre.target
[ SKIP ] Ordering cycle found, skipping systemd-ask-password-plymouth.path
[ SKIP ] Ordering cycle found, skipping paths.target
[ SKIP ] Ordering cycle found, skipping cryptsetup.target
[ SKIP ] Ordering cycle found, skipping local-fs.target
[ SKIP ] Ordering cycle found, skipping local-fs-pre.target
[ SKIP ] Ordering cycle found, skipping systemd-ask-password-plymouth.path
[ SKIP ] Ordering cycle found, skipping cryptsetup.target
[ SKIP ] Ordering cycle found, skipping systemd-pcrphase-sysinit.service
[ SKIP ] Ordering cycle found, skipping local-fs.target
[ SKIP ] Ordering cycle found, skipping local-fs-pre.target
[ SKIP ] Ordering cycle found, skipping plymouth-start.service
[ SKIP ] Ordering cycle found, skipping cryptsetup.target
[ SKIP ] Ordering cycle found, skipping local-fs.target
[ SKIP ] Ordering cycle found, skipping local-fs-pre.target
[ SKIP ] Ordering cycle found, skipping systemd-ask-password-plymouth.path
[ SKIP ] Ordering cycle found, skipping cryptsetup.target
[ OK ] Finished plymouth-read-write.service - Tell Plymouth To Write Out Runtime Data.
[ OK ] Finished systemd-tmpfiles-setup.service - Create Volatile Files and Directories.
Starting systemd-timesyncd.service - Network Time Synchronization...
Starting systemd-update-utmp.service - Record System Boot/Shutdown in UTMP...
[ SKIP ] Ordering cycle found, skipping systemd-ask-password-plymouth.path
[ SKIP ] Ordering cycle found, skipping cryptsetup.target
サービスファイル
cat ./remove-bad-yoga-keyboard-device.service
[Unit]
Description=disable the internal keyboard
Before=keyboard-setup.service
Before=console-setup.service
Before=systemd-user-sessions.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/local/remove-bad-yoga-keyboard-device
WorkingDirectory=/local
StandardOutput=inherit
StandardError=inherit
User=root
[Install]
WantedBy=multi-user.target
インストーラ
cat setup-disable-yoga-keyboard
#!/bin/bash
cwd="$(pwd)"
cd "$(dirname "$(realpath "$0")")"
this_dir="$(pwd)"
mkdir -p /local
cd /local
cp -t . "${this_dir}"/remove-bad-yoga-keyboard-device
cd /etc/systemd/system
cp -t . "${this_dir}"/remove-bad-yoga-keyboard-device.service
systemctl daemon-reload
systemctl enable remove-bad-yoga-keyboard-device.service
systemd-analyze
ディスプレイを使用した一部のプレイでは、競合が表示されますshutdown.target
。しかし、この目標を分析してみると、すべてと衝突することがわかりました。私の考えでは、シャットダウンが特別であり、アナライザがこれを理解していないようです。それはshutdown.target
問題ではありません。これは私に何かという質問を残します。
もう少し試した後、ルールを削除してパスし、Before=keyboard-setup.service
エラーsystemd-analyze verify
なしで起動しました。
しかし、依存関係エラーが発生するのはなぜですか?私は何を実行するかを指定せず、以前に実行する項目のみを指定しました。しかし、依存関係のサイクルがあります。
オペレーティングシステム:Debian GNU / Linux 12(bookworm)は
/local
ルートパーティションのディレクトリです。
ベストアンサー1
設定が含まれていないため、自動的にいくつかの追加の依存関係が得られますDefaultDependencies=no
。remove-bad-yoga-keyboard-device.service
Requires=sysinit.target
After=sysinit.target
After=basic.target
Conflicts=shutdown.target
Before=shutdown.target
次の段落を参照してください基本依存関係存在するman 5 systemd.service
。
cryptsetup.service
キーボードはパスワード入力を必要とする可能性があるため、システムの起動時に初期化されます。サービスを実行するように指定したので、Before=keyboard-setup.service
サービスは実際には非常に早く配置されます。ただし、自動的に生成されたデフォルトの依存関係は、との両方を入れる必要があるため、After
循環が発生します。sysinit.target
basic.target
man 7 bootup
したがって、以前の場所に配置するサービスを作成するたびにフローチャートを研究する必要がありますbasic.target
。DefaultDependencies=no
これらのサービスを追加することを忘れないでください。