태그 보관물: launchd

launchd

launchd에 에이전트를 등록하는 방법 <string>/path/to/folder/</string>

정기적으로 출시 일정을 예약 할 수 없습니다. launchctl / launchd OS X (Leopard)에서. 기본적으로 웹에서 지침의 단계별 목록을 찾을 수 없으며 직관적 인 접근 방식이 작동하지 않습니다.

그만큼 sync.plist 파일:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>net.madrat.utils.sync</string>
        <key>Program</key>
        <string>rsync</string>
        <key>ProgramArguments</key>
        <array>
            <string>-ar</string>
            <string>/path/to/folder/</string>
            <string>/path/to/backup/</string>
        </array>
        <key>StartInterval</key>
        <integer>7200</integer>
    </dict>
</plist>

이 스크립트를 경로 안에 넣었습니다. ~/Library/LaunchAgents.

다음으로, 나는 등기 사용하는 스크립트

launchctl load ~/Library/LaunchAgents/sync.plist

마지막으로 작동하는지 테스트하기 위해 시작한 작업:

 launchctl start net.madrat.utils.sync

– 아무 일도하지. 수동으로 실행 rsync 명령을 사용하면 예상 된 결과가 산출됩니다.

존재하지 않는 작업을 시작하려고하면 오류 메시지가 표시되므로 작업이 올바르게 등록되었음을 확신 할 수 있습니다. 하지 않았다 위의 명령에 들어가십시오).

내가 뭘 잘못 했니?



답변

Lingon launchd를 관리 할 수있는 훌륭한 GUI 도구입니다. 프로젝트가 현재 지원되지 않는 것 같습니다 …하지만 10.5.x에서도 계속 작동합니다.

그러나 당신의 특정한 문제에 … 시도해 보셨습니까?

sudo launchctl list

.plist가 올바르게 발사되는지 여부를 알려줍니다. 그것은 데몬이 lauching이 아니라면 1을 반환하고 성공하면 ‘0’을 반환합니다. 어쩌면 그것을 찾을 수 있습니다.

내가 ‘1’을 볼 때마다 그것은 틀린 장소에 스크립트를 넣었거나 오타를 만들거나 권한을 잘못 설정했기 때문에 일반적으로 발생합니다.

또한 …. 자주 재부팅 .. 내가 본

launchctl start

재부팅이있는 곳에서는 효과가 없다.

또한, 가까이에 질문을보고 …. 그냥 rashync 코드를 bash 스크립트에 넣는 것이 아니라 … /usr/bin/….. 그럼 너는 할 수있다. chmod+x 그 파일 …. 당신이 좋아할 때마다 .plist를 해고하기 위해 스크립트를 단순화하십시오 ….


답변

긴 대답 :

몇 가지 기본 원칙을 이해하지 않고도 launchd로 작업하기가 어렵습니다. 따라서 단계별 지침을 찾을 수 없을 것입니다. 많은 기능을 갖추고 있습니다. 좋은 출발은 ADC에 대한 시작 안내서로 향하는 것입니다. http://developer.apple.com/macosx/launchd.html

또한 매뉴얼 페이지를 읽을 수도 있습니다. launchd, launchctl .plist 파일 구문, launchd.plist.

대리인이나 데몬 (deamon)을 어디에 두어야하는지에 대한 오해가 자주 발생하므로 여기에 대한 정보를 알려 드리겠습니다.

  • 로그인 한 사용자가없는 경우에도 작업을 실행해야하는 경우 / Library / LaunchDaemons에 저장하십시오.
  • 사용자가 로그인 한 경우에만 유용 할 경우 / Library / LaunchAgents 또는 특정 사용자의 개인 LaunchAgents 디렉토리 (~ / Library / LaunchAgents)에 넣으십시오.
  • 시스템 제공 데몬 용으로 예약 된 / System / Library에 작업을 넣지 마십시오.
~/Library/LaunchAgents         Per-user agents provided by the user.
/Library/LaunchAgents          Per-user agents provided by the administrator.
/Library/LaunchDaemons         System wide daemons provided by the administrator.
/System/Library/LaunchAgents   Mac OS X Per-user agents.
/System/Library/LaunchDaemons  Mac OS X System wide daemons.

짧은 답변:

plist 파일의 이름이 잘못되었을 수 있습니다. 지금은 테스트 할 수 없지만 설정해야합니다. net.madrat.utils.sync.plist. 처음에는 유용 ​​할 수도 있습니다. unload 파일을 편집 한 경우로드하기 전에 데몬.


답변

나는 이것이 표준 동작이라는 문서를 찾을 수 없지만 launchd는 plist 파일에 절대 경로가 필요합니다. 그래서 시도해보십시오. /usr/bin/rsync 대신에. 나를 위해 일한다!


답변

이 시도, 내 스크립트는 프로그램 부분을 사용하지 않고 그냥 args 프로그램을 작동 …

바꾸다

    <key>Program</key>
    <string>rsync</string>
    <key>ProgramArguments</key>
    <array>
        <string>-ar</string>
        <string>/path/to/folder/</string>
        <string>/path/to/backup/</string>
    </array>

    <key>OnDemand</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>rsync</string>
        <string>-ar</string>
        <string>/path/to/folder/</string>
        <string>/path/to/backup/</string>
    </array>

답변

이 키를 plist 파일에 추가하려고합니다.

    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>

답변

.plist 파일에 하나의 잘못된 점이 있고, 하나의 사기성 문제가 있습니다 (이 각각의 점은 이전 답변에서 언급 했으므로 여기에 함께 표시됩니다).

당신은 더 잘 쓸 것입니다 :

<key>ProgramArguments</key>
<array>
  <string>/usr/local/bin/rsync</string>
  <string>-ar</string>
  <string>/path/to/folder/</string>
  <string>/path/to/backup/</string>
</array>

첫 번째 인수는 ProgramArguments array는 실행될 프로그램입니다 – 생략했습니다. 만약 Program key가 생략되면, 기본값은의 첫 번째 인수가됩니다. ProgramArguments; 이 값을 한 번만 지정하는 것이 좋습니다.

이 첫 번째 인수를 생략 했으므로 .plist 의지 rsync를 호출했습니다 ( Program ), rsync의 ‘첫 번째 인수’는 /path/to/folder, 아니라 -ar (실행중인 프로그램은 다음에서 매우 간략하게 볼 수 있습니다. ps 출력과 함께, 오류와 함께 종료되기 전에 -ar이것은 0 번째 인자의 내용이다).

너는하지 않는다. 있다 경로를 포함 rsync, 그러나 이런 종류의 상황에서, 아마도 그렇게하는 것이 현명 할 것입니다. PATH 적절하게 설정됩니다.

이것에 대한 문서는에 있습니다. launchd.plist(5). 그 맨 페이지는 ProgramArguments 키가 전달됩니다. execvp(3). 그건 execvp PATH 검색에 대해 설명하는 맨 페이지


답변