launchd를 사용하여 실행중인 프로그램 또는 프로세스 모니터링

간단한 bash 스크립트를 작성하여 프로그램 (유일한 인수로 제공)이 실행 중인지 확인하고 스크립트가 아닌 경우 설정된 주소로 이메일을 보냅니다. 스크립트는 명령 줄에서 실행되면 작동하지만 일생 동안 스크립트를 실행하도록 설정하는 사용자 에이전트 (~ / Library / LaunchAgents)로 작동시킬 수는 없습니다. 관련 .plist 파일의 최신 화신은 (Dropbox 모니터링)입니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!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>greencollar.Dropbox.checkRun</string>
        <key>StartInterval</key>
        <integer>60</integer>
        <key>Program</key>
        <string>/Users/greencollar/Documents/code/proc_check.sh</string>
        <key>ProgramArguments</key>
        <array>
            <string>proc_check.sh</string>
            <string>Dropbox</string>
        </array>
    </dict>
</plist>

예-bash 스크립트는 실행 가능하며 .plist 파일에 문제가 있음을 나타내는 항목이 콘솔에 없습니다. 나는 / bin / bash 프로그램을 만들려고 시도했지만 아무런 차이가없는 것 같고 execvp (3)를 읽는 것이 그렇지 않다는 것을 암시하는 것처럼 보인다. 나는 또한 <ProgramArguments>운없이 모든 것을 아래에 두려고 노력했다 . 이것이 나에게 매우 기본적으로 보이고 도움이되지 않아 매우 도움이 될 것입니다!

—————————– 1 차 편집 ——————- ——–

쉘 스크립트의 기본 사항은 다음과 같습니다.

#!/bin/bash
PROC=$1
if ! /usr/bin/pgrep $PROC > /dev/null
then
    /bin/echo "$PROC is not running!" | /usr/bin/mail -s "$PROC down" email@mydomain
fi

별로 잘못하지는 않습니다 …



답변

나는 이것을 코멘트로 게시하기 때문에 답변으로 게시하고 있으며 proc_check.sh 쉘 스크립트 의 내용을 보지 않아도 문제가 무엇인지 알고 있다고 생각 합니다.

첫 번째 답변을 삭제 한 후 질문을 다시 읽고 주석을 작성한 후 힌트스크립트 가 명령 줄에서 작동했지만 호출 할 때 힌트 가 아니라는 것을 알았습니다 launchd.

사용자 에이전트 .plist파일이 트리거되면 $PATH수신 한 파일 에 스크립트 내에서 호출되는 일부 명령 / 유틸리티에 대한 경로가 포함되지 않을 수 있습니다 . $PATH에 전달 proc_check.sh 쉘 스크립트가 아니라 :

/usr/bin:/bin:/usr/sbin:/sbin

따라서 위에 있지 않거나 스크립트정규화 된 경로 이름을$PATH 포함 하는 스크립트 에서 호출 된 프로그램은에 의해 호출 될 때 실행되지 않습니다 .launchd

이 문제를 해결하려면 위의에없는 스크립트 내에서 호출 된 모든 실행 파일에 대해 완전한 경로 이름 을 사용 하거나 터미널에서 실제 출력이있는 곳 다음 에 명령문을 추가하십시오 .$PATHPATH=...shebang...echo $PATH

#!/bin/bash
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

참고 : $PATH위 의 내용은 echo $PATH내 시스템 에서 출력되는 내용이며 사용자의 시스템과 다를 수 있습니다.


답변

이것을 멀리 얻은 후에는 launchd에 의해 메일이 호출되는 데 문제가 있었으므로 검색하여 이것을 참조한 것을 발견 했습니다 . 그것은 이었다 .plist 그것이 메일 프로세스가 충분히 일을 할 살 수 있도록 할 것 AbandonProcessGroup 키를 포함하지 않았 음에 파일. 첨가

<key>AbandonProcessGroup</key>
<true/>

작동하게 만들었습니다.

타사 앱에서 생성 한 .plist를 사용하여 “시간을 절약”한다는 점에서이를 위해 스스로 설정했습니다. 이러한 앱은 제작 한 .plist 파일에서 항상 완전하거나 정확하지는 않습니다.

도움을 주신 @ user3439894 & @Mark에게 감사합니다.