plist 파일 대신 YAML을 사용해 보았습니다.

OS X 에서 launchd 에 등록할 때는 plist 라고 하는 포맷 (바이너리 혹은 XML) 의 설정 파일을 사용할 필요가 있다.
그런데 이것이 XML 이고, 조금 버릇이 있어 dict 라든지 key 라든지 string 라든지, 좀처럼 XML 같지 않다.
될 때까지 매우 읽기 어렵다. 읽어도 쓰고 싶지 않다.

↓ 는, 샘플로서, 1 분 간격으로 terminal-notifier 를 사용해 「하로-」라고 통지하는 설정.
$ terminal-notifier -message 'はろー'


<?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>sample-launchd</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/terminal-notifier</string>
        <string>-message</string>
        <string>はろー</string>
    </array>
    <key>StandardOutPath</key>
    <string>/tmp/sample-output.txt</string>
    <key>StartInterval</key>
    <integer>60</integer>
</dict>
</plist>

이런 것을 기억하고 하늘에서 쓸 수 있는 느낌이 들지 않는다. crontab이라면 1 갈 정도로 쓸 수 있고, 아마 손이 기억하고 있다.
launchd에 좌절감이 모여 있습니다.

그래서 대책을 생각해 보았다.

인간에게 읽기 쉬운 YAML로 쓰는 것이다.

YAML


StandardOutPath: /tmp/sample-output.txt
StartInterval: 60
ProgramArguments:
  - /usr/local/bin/terminal-notifier
  - -message
  - はろー
Label: sample-launchd

이것이라면 읽을 수 있다. 꽤 읽을 수 있습니다. 조금 기억하면 손으로 쓸 수 있는 레벨.

그리고 OS X에는 plutil이라는 도구가 포함되어있어 JSON을 위의 plist 용 XML 형식으로 변환 할 수 있습니다.
$ yaml2json < some_daemon.yaml | plutil -convert xml1 - -o some_daemon.plist

하면, 보통의 plist가 된다. 그리고는 평소대로.
$ launchctl load some_daemon.plist

라고 읽어 줄 수 있다. 물론 멈출 때는 unload .

그 밖에도 생각나는 응용예



스스로는 시도하지 않지만 plist를 병합하지 않으면 안되는 괴로움이 있는 iOS의 개발등에서 사용할 수 있지 않을까.

보충



yaml2json



실험에 사용한 yaml2json 되는 명령은 htps //w w. 음 pmjs. 코 m / Pac 카게 / 야 ml 2j 로 넣을 수 있다.

아마 자신의 실수로 ↑ 의 거리에서는 의도하고 있던 거동이 되지 않았다. ↓ 의 별칭이 의도한 거동이었다.

또는 Python 환경이 있다면 PyYAML을 설치하고,
$ python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)'

같은 명령을 yaml2json 에 앨리어스 하면 된다.

terminal-notifier


$ brew install terminal-notifier

로 설치할 수 있다. 비교적 편리.

launchd 스케줄링



이 기사에서는 「YAML로 할 수 있겠지」라는 내용만을 다룬다.
세세한 스케줄링 방법까지 알고 싶은 분은 Apple 문서 읽기

Scheduling Timed Jobs

정정: cron에 관하여



이 기사를 처음 썼을 때 OS X의 cron에 대해 차이가있었습니다. 죄송합니다.
↓ 와 같이 쓰고 있었습니다만, 보통으로 사용할 수 있다.

OS X에서 정기 실행하려면 launchd용으로 설정을 읽고 써야 한다.
여러가지 설정하면 crontab 도 사용할 수 있게 되는 것 같지만, 디폴트에서는 cron 는 멈추고 있다.

참고 : ぃ tp // 코 m / 부상 / ms / 035304 7295750 cdf7d

좋은 웹페이지 즐겨찾기