정기적으로 출시 일정을 예약 할 수 없습니다. 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 검색에 대해 설명하는 맨 페이지