종료하기 전에 Mac OS X에서 프로그램을 실행하려면 어떻게해야합니까?


9

재부팅 할 때 모든 VirtualBox VM을 저장하도록 Mac OS X을 사용하려고합니다. 이미이 작업을 수행하는 스크립트가 있지만 재부팅 전에이 스크립트를 자동으로 실행하려면 OS X가 필요합니다.

Mac OS X이 재시동 될 때 / sbin / reboot를 실행합니까?

아니면 어떻게 다른 일을 할 수 있습니까?


중복 된 질문은 여기에 있습니다 : apple.stackexchange.com/questions/16825/…
michaelmichael

중복되지 않습니다. 로그 아웃 할 때 스크립트 나 프로그램을 실행하는 방법을 알고 싶지 않습니다. 종료 할 때 스크립트 또는 프로그램을 실행하는 방법을 알고 싶습니다.
Andrew J. Brehm

1
네가 옳아. 정확한 복제본이 아닙니다. 링크 된 질문에 대한 답변은 사용자가 /etc/rc.shutdown.local종료 할 때 스크립트 를 실행 하도록 스크립트를 배치하도록 권장합니다. 그것이 당신이 찾고있는 것 같습니다.
michaelmichael

이 사이트는 그 주장을하는 것 같습니다 : hints.macworld.com/article.php?story=20051013141919568
Andrew J. Brehm

rc.shutdown.local 메소드가 작동하지 않습니다.
앤드류 제이 브렘

답변:


5

Apple은 " launchd " 를 사용하도록 권장하지만 가장 쉬운 방법은 터미널의 pico와 같은 쉘 스크립트를 작성하는 것입니다.

pico /Users/Shared/logoutHook.sh

파일은 다음과 같은 내용을 포함 할 수 있습니다.

#!/bin/bash
say 'Hasta la vista baby!'

그런 다음 실행 권한을 부여하십시오.

sudo chmod +x /Users/Shared/logoutHook.sh

마지막으로 스크립트를 로그 아웃 프로 시저에 연결하십시오.

sudo defaults write com.apple.loginwindow LogoutHook /Users/Shared/logoutHook.sh

이것을 테스트하지 않은 상태에서 다른 응용 프로그램을 시작하면 나 자신과 당신에게 경고하는 것이 도움이 될 것이라고 생각합니다.

  • 원하는 것을 실행하기 위해 종료 신호를 종료해야 할 수도 있습니다.

  • 그런 다음 새로운 것을 보내십시오 (우리 자신의
    스크립트가 보낸 신호를 죽이지 않도록 조심하십시오 )…


후크를 제거하려면 다음을 수행하십시오.

sudo defaults delete com.apple.loginwindow LogoutHook

" launchd "를 사용하는 경우 SIGTERM 신호를 캡처하는 것이 좋습니다. /System/Library/LaunchDaemons/com.apple.shutdown_monitor.plist를 살펴보십시오.


4

Launched는 StopService () 서브 루틴 이있는 모든 스크립트 / 데몬에 종료에 대한 조기 경고를 보냅니다 . 이렇게하면 프로세스가 정리할 시간이 가장 길어집니다.

launchd를 사용하여 스크립트를 시작하고 종료 할 때까지 백그라운드에서 실행하십시오.

조기 경보를받은 서비스가 종료 된 후 모든 프로세스SIGTERMSIGKILL핵폭탄이 발생 하기 몇 초 전에 신호를 받습니다 .

해당 시간이되면 명령을 실행하기 위해 SIGTERM을 잠자고 트랩하는 스크립트를 작성할 수 있습니다. 명령 실행에 충분한 시간이 필요한지 확인해야합니다. 이것은 약간의 코딩을 피하지만 많이는 아닙니다. 일반적으로 쉘 스크립트에서 데몬을 만드는 것이 좋습니다.


역사적 관점에서 볼 때 /sbin/reboot, 런레벨은 Darwin / OS X에 존재하지 않았으며 이제 rc.shutdown나머지 부분과 함께 더 이상 사용되지 않습니다 . 호랑이 또는 그 이전 버전에서 rc.shutdown을 사용할 수 있습니다 (현재 확인할 이미지가 하나도 없습니다) Lion은 확실히 rc.d 및 init.d의 흔적을 모두 제거했습니다.rclaunchd

sleepwatcher 가 귀하의 경우에 도움이 되는지 확인하고 싶을 수도 있습니다 . 나는 그것을 오랫동안 사용하지는 않았지만 확실히 딜레마를 해결하는 것을 목표로합니다.


"더 이상 사용되지 않음"은 "작동하지 않음"을 의미합니다. :-(
Andrew J. Brehm

그렇습니다. 경고는 Tiger에서 시작되었으며 Leopard와 함께 사라 졌다고 생각합니다. 제 뇌를 돌아 다니는 모든 Lion 변경 사항을 기억하기는 어렵습니다.
bmike

이것은 실제로 문제를 복잡하게 만들고 Mac OS X을 매우 나쁜 서버 플랫폼으로 만듭니다.
Andrew J. Brehm

launchd는 종료시 스크립트를 완전히 실행할 수 있습니다. 아마도 나는 역사를 편집하고 그 사실을 더 분명하게 남겨 두어야 할 것이다. 런칭은 어떤 방법으로 종료시 스크립트를 실행해야합니까?
bmike

종료시 실행 스크립트를 실행하는 방법을 모르겠습니다. 부팅시 시작하기 위해 launchd를 사용합니다.
앤드류 제이 브렘
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.