systemd
컴퓨터가 종료되기 전에 일부 작업을 수행하는 서비스를 만들었습니다 . 해당 단위 파일은 다음과 같습니다.
[Unit]
Before=shutdown.target
DefaultDependencies=no
[Service]
Type=simple
ExecStart=/opt/demo.sh
TimeoutSec=infinity
[Install]
WantedBy=shutdown.target
현재 컴퓨터의 네트워크 연결이 끊어지기 전에 스크립트가 실행되지만 SSH 연결이 닫힌 후 다시 연결하려고 하면 "연결 거부됨" 오류와 함께 실패합니다. 나는 스크립트 자체가 종료될 때까지(즉 tail -f /var/log/syslog
, 실행할 수 있도록) SSH 연결을 유지하는 것을 선호합니다 .
SSH 서버가 종료되기 전에 스크립트를 강제로 실행하는 방법은 무엇입니까?
답변1
다음과 같이 systemd 단위를 사용하여 원하는 결과를 얻을 수 있습니다.
[Unit]
Description=Service to run on shutdown before any other services
After=default.target
[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/opt/demo.sh
RemainAfterExit=yes
TimeoutStopSec=0
[Install]
WantedBy=default.target
systemd는 종속성에 따라 역순으로 서비스를 중지합니다. 따라서 위의 서비스는 /bin/true
시스템이 중지/종료 상태에 도달 default.target
하고 스크립트가 /opt/demo.sh
중지/종료 상태가 된 후에 시작됩니다. 요구 사항에 따라 조정해야 할 수도 있습니다 TimeoutStopSec
. 현재는 시간 초과가 발생하지 않도록 설정되어 있습니다(기본값 90초 대신).