launchd에 에이전트를 등록하는 방법


11

정기적으로 출시 일정을 예약 할 수 없습니다. 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 명령을 사용하면 예상 된 결과가 산출됩니다.

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

내가 뭘 잘못 했니?

답변:


5

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

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

sudo launchctl list 

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

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

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

launchctl start

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

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


감사합니다. 명령을 추가 셸 파일에 넣고 시작합니다. 트릭을 했어. 그것은 매우 만족스럽지 못한 해결책이지만 ... 명령을 직접 호출하지 않는 이유는 무엇입니까? 그건 그렇고, launchctl list 그랬다. 1을 표시하지만, 수동으로 에이전트를 시작한 후에 만 launchctl start.
Konrad Rudolph

나는 긍정적이지는 않지만 launchd .plist 파일은 데몬에 대한 '주문형 출시'기준을 정의하기위한 것일뿐입니다. 아마도 & lt; key & gt;에서 전달한 인수를 어떻게 처리해야할지 모르겠습니다. ; ProgramArguments & lt; / key & gt ;.
CaseyIT

11

긴 대답 :

몇 가지 기본 원칙을 이해하지 않고도 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 파일을 편집 한 경우로드하기 전에 데몬.


정보에 대해서 감사드립니다. 그러나 : (1) 나는 이미 위에 링크 된 모든 문서를 읽고 몇 가지 더. 에이전트를 시작하는 방법은 실제로 어디에도 없습니다. (적어도, 나는 그것을 어디에서도 발견하지 못했다.) 그것은 괜찮을 것이다. 만약 내 직관적 인 접근 방식이 효과가있었습니다. (2) 파일 이름을 변경해도 작동하지 않습니다. :-( (3) 정보의 일부는 구식입니다. 예를 들어, 그들은 명령을 제안합니다 launchd bash 디버깅을 위해 -하지만 이것은 Leopard에서 작동하지 않습니다 ( launchd 직접 시작할 수 없음).
Konrad Rudolph

@ Konrad Rudolph : 환영합니다 :) @Skylarking은 흥미로운 점을 발견했습니다. 파일의 전제를 확인 했습니까? 또는 sudo 명령을 사용 했습니까? 또한 launchctl이 제대로 작동하려면 재부팅해야했습니다.
Arko

2

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


0

이 시도, 내 스크립트는 프로그램 부분을 사용하지 않고 그냥 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>

0

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

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

0

.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 검색에 대해 설명하는 맨 페이지

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.