에러 메시지

에러 메시지

종속성 오류가 발생하는 이유는 무엇입니까? 나는 무엇을 실행할 것인지 지정하지 않고 이전에 실행할 항목만 지정했습니다. 그러나 종속성 주기가 있습니다.

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.targetbasic.target

man 7 bootup따라서 이전 어디에나 배치될 서비스를 작성할 때마다 순서도를 연구해야 합니다 basic.target.DefaultDependencies=no이러한 서비스를 추가하는 것을 잊지 마세요 .

관련 정보