종료하기 전에 systemd를 사용하여 스크립트를 실행하는 방법은 무엇입니까?

종료하기 전에 systemd를 사용하여 스크립트를 실행하는 방법은 무엇입니까?

systemd가 종료되기 전과 파괴되기 전에 실행되도록 이 섹션에 [install]무엇을 추가해야 합니까 ?/home/me/so.pl/proc/self/net/dev

[Unit]
Description=Log Traffic

[Service]
ExecStart=/home/me/so.pl

[Install]
?

답변1

권장되는 해결 방법은 서비스 단위를 일반 서비스로 실행하는 것입니다. 리소스 섹션을 참조하세요 [Install]. 따라서 모든 것을 거꾸로 생각해야 하며 종속성도 마찬가지입니다. 종료 순서는 시작 순서의 역과정이기 때문입니다. 그렇기 때문에 스크립트를 에 배치해야 합니다 ExecStop=.

다음 솔루션이 저에게 효과적이었습니다.

[Unit]
Description=...

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>

[Install]
WantedBy=multi-user.target

RemainAfterExit=true활동 하지 않을 ExecStart때 필요합니다 .

파일을 생성한 후 systemctl daemon-reloadsystemctl enable yourservice --now.

방금 systemd IRC에서 받았는데, 포인트는 mezcalero로 갑니다.

답변2

  • 서비스 실행시작하기 직전모든 재시작/종료/일시 중지/kexec 서비스(즉, 루트 파일 시스템이 읽기 전용으로 다시 마운트되기 전 마지막 순간)는 다음 서비스 구성을 사용합니다.

    [Unit]
    Description=Save system clock on shutdown
    DefaultDependencies=no
    After=final.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/lib/systemd/scripts/fake-hwclock.sh save
    
    [Install]
    WantedBy=final.target
    

    활성화:

    systemctl enable my_service.service
    
  • 스크립트 실행실제 직전restart/shutdown/halt/kexec (읽기 전용으로 다시 마운트되어 루트 파일 시스템에 쓸 수 없는 경우) 이 스크립트 실행 파일을 디렉토리에 추가하십시오 /usr/lib/systemd/system-shutdown.

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

또한보십시오:

https://www.freedesktop.org/software/systemd/man/bootup.html

https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html

답변3

확실하지는 않지만 명시적으로 추가했지만 설치 부분이 필요하지 않다고 생각합니다. 나도 테스트하지는 않았지만 시작해야 한다고 생각합니다.

[Unit]
Description=Log Traffic
Requires=network.target
After=network.target
Before=shutdown.target
DefaultDependencies=no

[Service]
ExecStart=/home/me/so.pl
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=shutdown.target

답변4

내가 아는 한 이것은 내가 필요한 것을 수행합니다(그러나 이유는 모르겠습니다).

[Unit]
Description=Log Traffic
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target


[Service]
ExecStart=/usr/local/bin/perl /home/me/log_traffic.pl --stop
Type=oneshot

관련 정보