Raspberry PI(raspbian 실행)에서 스크립트를 실행해야 합니다.일시 휴업/전원 끄기, 하지만재부팅하지 않음.
나의 첫 번째 시도는 다음과 같이 서비스를 정의하는 것이었습니다.
[Unit]
Description=Power off service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/usr/local/bin/poweroff.sh
[Install]
WantedBy=multi-user.target
이 방법은 효과가 있었지만 재부팅 시에도 스크립트가 실행 중이었습니다. 그래서 다른 대상에 설치하려고했습니다.
[Install]
WantedBy=shutdown.target halt.target
그러나 이 변경 후에는 스크립트가 전혀 실행되지 않습니다.
종료 시 실행되어야 하는 작업을 정의하는 올바른 방법은 무엇입니까?
답변1
내가 인터넷에서 수집한 것 중 가장 좋은 옵션은 Conflicts=reboot.target
유닛 파일( [Unit]
섹션)에 있는 다음 스크립트에서 다음을 실행하는 것입니다.
systemctl list-jobs | egrep -q 'reboot.target.*start'
reboot.target
시작 예정인 경우 재부팅입니다. 그렇지 않으면 그렇지 않습니다. 명령이 "성공"하면 시스템이 재부팅됩니다. 그렇지 않으면 종료됩니다. 다음과 같이 사용할 수 있습니다.
if ! systemctl list-jobs | egrep -q 'reboot.target.*start'; then
echo Shutting down
fi
답변2
다니엘의 대답은 질문의 문제를 해결합니다. 하지만 여전히 내가 필요한 것은 정확히 아니었습니다. 스크립트가 너무 일찍 호출되었고 가능한 한 늦게 실행되어야 했습니다(스크립트는 실제로 RPi의 GPIO
핀에 연결된 릴레이를 사용하여 전원을 끕니다).
좀 더 시간을 투자한 후, 제가 찾던 바로 그 기능을 수행하는 훨씬 더 간단한 솔루션을 찾았습니다.
/etc/systemd/system/systemd-poweroff.service.d
아직 존재하지 않는 경우 디렉터리를 만듭니다.- 디렉터리
poweroff.conf
에 새 파일을 만듭니다 ./etc/systemd/system/systemd-poweroff.service.d
[Service]
ExecStartPre=/usr/local/bin/poweroff.sh
이 접근 방식을 사용하면 새로운 서비스를 추가할 필요가 없습니다.