종속성 오류가 발생하는 이유는 무엇입니까? 나는 무엇을 실행할 것인지 지정하지 않고 이전에 실행할 항목만 지정했습니다. 그러나 종속성 주기가 있습니다.
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
이러한 서비스를 추가하는 것을 잊지 마세요 .