나는 Mac OS X 10.10.5 (Yosemite)를 사용하고 있으며 launchd (Launch Daemon)를 사용하여 일부 스크립트를 자동 실행 하는 방법을 배우고 있습니다 . 간단하게하기 위해 명령 shell
만 포함 된 스크립트 를 사용하기로 결정했습니다 echo
.
내용 hello.sh
:
#! /bin/sh
echo "hello"
또한 chmod a+x hello.sh
실행 가능하도록 실행했으며 스크립트를 수동으로 실행하면 제대로 작동합니다.
에서 ~/Library/LaunchAgents/
내가 가진com.yang.hello.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.yang.hello</string>
<key>Program</key>
<string>/Users/yangyy/hello.sh</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
실행 후 :
launchctl load -w ~/Library/LaunchAgents/com.yang.hello.plist
오류 메시지가 나타나지 않고이 명령을 실행하면 :
launchctl list | grep "com.yang.hello"
내가 얻는 응답은 다음과 같습니다.
- 78 com.yang.hello.plist
양수는 종료 코드를 나타내며 프로그램이 실제로 실행되지 않는 것 같습니다.
게다가 launchctl start ~/Library/LaunchAgents/com.yang.hello.plist
프로그램을 실행 하려고 할 때 이상한 것을 발견 했지만이 명령을 사용하면 오류가 반환되고 오류 메시지가 표시되지 않습니다.
뭐가 문제 야?
78의 종료 상태가 무엇을 의미하는지 모르겠지만이 스크립트가 실행 에이전트로 실행될 때 감지 할 수있는 작업을 수행 할 것으로 기대하지 않습니다. 출력이 어디에도 전달되지 않기 때문입니다. 터미널에서 실행하면 출력이 해당 터미널 창에 첨부되므로 여기에 "hello"가 표시됩니다. 그러나 launchd는 터미널 (또는 다른 관련 출력 대상)에 연결되어 있지 않으므로 "hello"가 삭제됩니다. 실행 중인지 확인하려면 다음 키를 .plist에 추가 한 다음 언로드하고 다시로드하여 해당 출력 (표준 출력 및 오류 출력 모두)을 파일로 보낼 수 있습니다.
<key>StandardOutPath</key>
<string>/Users/yangyy/hello-output.txt</string>
<key>StandardErrorPath</key>
<string>/Users/yangyy/hello-errors.txt</string>
이제 launchd가 스크립트를 시작하더라도 다른 문제가있을 수도 있습니다. launchd 자체가 문제를보고하는지 확인하려면 시스템 로그 파일을 살펴보고 ( tail -f /var/log/system.log
또는 /Applications/Utilities/Console.app 실행) 에이전트를 언로드하고 다시로드하고 관련 항목이 로그에 나타나는지 확인합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다