존재하다복원 시 anacron 시작에 대한 데비안 버그 보고서, 일부에서는 시스템 종속성이 작동하는 방식으로 인해 이 코드 조각(간결함을 위해 단순화됨)이 재개가 아닌 일시 중지 시 트리거될 수 있다고 주장합니다. systemd 문서와 systemd와 함께 제공되는 단위 파일을 사용하여 표시된 경쟁 조건을 이해할 수 없습니다.
[Unit]
Description=Do something at resume
After=suspend.target
[Service]
ExecStart=/bin/do-something
[Install]
WantedBy=suspend.target
systemd-suspend.service
이 기사의 저자는 다음 진술이 포함된 를 인용합니다 (다시 관련 진술로 압축됨).
[Unit]
After=sleep.target
Requires=sleep.target
두 번째는 두 개의 서로 다른 단위(둘 다 나중에 정렬됨)가 sleep.target
병렬로 실행되므로 두 단위 간에 정렬이 없다는 것입니다. 나는 이 말에 전적으로 동의하지만,둘 다 의존하는 두 개의 단위는 없습니다.sleep.target
, 내가 아는 한. 선언은 절전 모드 전에 완전히 시작되어 모든 종속 장치가 시작 되도록 systemd-suspend.service
보장합니다 . 하지만 (원본 유닛 파일이 실제로 의존하는 대상)을 살펴보면 다음과 같은 내용을 발견했습니다.sleep.target
sleep.target
suspend.target
[Unit]
BindsTo=systemd-suspend.service
After=systemd-suspend.service
suspend.target
나는 이 파일이 성공적인 출시 후에 systemd-suspend.service
성공적인 출시 만을 선언한다는 것을 이해합니다. 이제 다시 살펴보면 systemd-suspend.service
파일에서 다음 명령문을 찾을 수 있습니다.
[Service]
Type=oneshot
Exec=/lib/systemd/systemd-sleep suspend
내가 이해하는 한 일회성 서비스는 Exec
명령이 완료될 때까지 "시작" 상태로 전환되지 않습니다. 따라서 이 서비스에 대해 주문한 모든 작업은 After
완료될 때까지 시작할 수 없습니다. 마지막으로 시스템이 다시 작동할 때까지 차단하는 systemd-sleep
문자열을 마법처럼 쓰는 systemd-sleep을 살펴보세요 . 이렇게 하면 나중에 시작하려는 모든 작업이 복원 전에 실제로 시작되지 않도록 /sys/power/state
해야 합니다 .systemd-suspend.service
내가 블록이 기록되었다고 주장하는 이유 /sys/power/state
는 쓰기가 다음에 의해 이루어지기 때문입니다.이 파일에 대한 sysfs 저장 기능, 이는 호출됩니다.pm_suspend
비수면 모드의 경우 순차적으로 enter_state
(동일한 소스 파일에서 직접 pm_suspend
) 호출되며 분명히 재개하기 전에 반환되지 않습니다.
답변1
네가 옳아;게시물 #124틀렸다.
사람들은 가끔 단위를 쓰는데 그게 문제가 됩니다 WantedBy=sleep.target
After=sleep.target
. 이렇게 하면 잠자리에 들기 전에 장치가 시작된 다음 완료될 때까지 기다리지 않고 잠자기 상태로 전환됩니다. 이는 거의 확실히 그들이 원하는 작업이 아닙니다. 아마도 이것이 포스터가 염두에 둔 것입니다.
권한: 비슷한 분석을 바탕으로 이력서에서 hdparm을 실행하는 유닛을 독립적으로 작성했습니다. 응답처럼 잘 작동합니다게시물 #129설명하다. 내 장치는 매번 잘 작동합니다. 난 알아요 왜냐하면 내가 달리면아니요하드 드라이브가 딸깍거리는 소리가 들립니다. 예전에는 알아볼 수 있었는데udev 오류이로 인해 클릭 소리가 들리기 때문에 이전 솔루션을 신뢰할 수 없게 되었습니다.