systemd: 읽기 전용으로 마운트된 후 파일 시스템이 닫힐 때 스크립트 실행

systemd: 읽기 전용으로 마운트된 후 파일 시스템이 닫힐 때 스크립트 실행

파일 시스템을 읽기 전용으로 다시 마운트한 후 종료 시 스크립트를 실행할 수 있는 방법이 있습니까?

무선 소켓에 라즈베리 파이가 연결되어 있고 송신기와 스크립트를 통해 제어할 수 있습니다. 파일 시스템이 읽기 전용으로 마운트된 후 종료 시 해당 소켓을 닫고 싶습니다(Raspberry Pi 전원 끄기).

나는 이것을 시도했습니다 :

[Unit]
Description=Test
DefaultDependencies=no
Requires=shutdown.target umount.target final.target
After=shutdown.target umount.target final.target

[Service]
Type=oneshot
ExecStart=/test
KillMode=none

[Install]
WantedBy=halt.target

script/test는 현재 설치를 출력합니다. 종료 시 실행되면 루트 파일 시스템이 예상되는 읽기 전용 상태가 아닌 읽기/쓰기 상태에 있음을 나타냅니다.

편집하다:

/테스트 내용:

#!/bin/bash

echo -n 'Debug-Mount: ' > /dev/tty1
cat /proc/mounts | grep /dev/sda > /dev/tty1

종료 시 화면 출력:

여기에 이미지 설명을 입력하세요.

답변1

확실한 해결책을 찾았습니다. 스크립트를 /usr/lib/systemd/system-shutdown/에 넣으세요.

또한보십시오:https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html

실제 시스템 quit/poweroff/reboot/kexec를 실행하기 전에 systemd-shutdown은 /usr/lib/systemd/system-shutdown/에 있는 모든 실행 파일을 실행하고 "halt", "poweroff" , "reboot"라는 인수를 전달합니다. 또는 "kexec"(선택한 작업에 따라) 디렉터리의 모든 실행 파일은 병렬로 실행되며 모든 실행 파일이 완료될 때까지 실행이 계속되지 않습니다.

답변2

원래 스크립트와 관련하여 일반적으로 Halt.target 이전에 실행되며(halt.target 이전에 주문하지 않았음을 참고) 해당 시점에서 파일 시스템이 다시 마운트되지 않습니다. systemd-shutdown (systemd는 마지막에 실행됩니다 - Halt.target에 도달한 후), 항목을 종료하고(아마도 정렬되지 않은 스크립트와 함께 =)) 최종 umount/swapoff/losetup을 실행하고 불가능한 마운트 해제를 다시 설치한 다음 병렬로 실행합니다. 시스템 종료 디렉토리를 확인하고 종료가 존재하는 경우 /run/initrams로ivot_root()를 시도하십시오(존재하지 않거나 피벗에 실패하면 계속 중지하십시오).

관련 정보