애플은 로그 아웃 후크 교체에 관심이없는 것 같습니다.
그러나 요세미티에서 개선 된 기능 중 하나는 이제 시작되어 셸 스크립트로 신호를 올바르게 전송한다는 것입니다. 이것이 의미하는 바는 이제 다음과 같이 로그 아웃 작업을 수행 할 수 있다는 것입니다.
다음은 logout.sh의 예입니다.
#!/bin/sh
onLogout() {
echo 'Logging out' >> ~/Logs/logout.sh.log
exit
}
trap 'onLogout' SIGINT SIGHUP SIGTERM
while true; do
sleep 86400 &
wait $!
done
이것은 트랩 된 신호 중 하나를 수신 할 때까지 잠자기 (비동기 적으로, 앰퍼샌드없이 동기식으로 수행하고 작동하지 않는 것 같습니다).이 시점에서 onLogout
함수 를 실행합니다 .
RunAtLoad
시작 에이전트 또는 시작 데몬을 사용하여 해당 스크립트를 시작하기 만하면 로그 아웃 또는 종료시 실행되지만 작업이 종료되기 전에 완료하는 데 시간이 제한되어 있다는 점을 명심해야합니다. 따라서 시간이 오래 걸리거나 지연 될 수있는 네트워크 연결이 필요한 항목을 실행하는 데 사용해서는 안됩니다.
물론 이것은 매버릭스 또는 그 이전의 사람에게는 아무 소용이 없지만 요세미티에서는 이제 예상대로 작동하는 것 같습니다. 그래서 실제로 처음부터 launchd
제대로하고 있었지만 신호를 제대로 보내지 않았습니다. :)
참고 :이 작업을 수행하려면 셸 스크립트를 시작하여 직접 실행해야합니다. 즉,을 통해 호출하면 안됩니다 sh
. 따라서 ~/Library/Scripts/foo.sh
프로그램에 배치되면 인수는 다음과 같습니다.
<key>ProgramArguments</key>
<array>
<string>~/Library/Scripts/foo.sh</string>
<string>bar</string>
</array>
<key>EnableGlobbing</key>
<true/>
line 8: syntax error near unexpected token ;'
(세미콜론 앞에 무덤과 함께)