plist 파일 대신 YAML을 사용해 보았습니다.
그런데 이것이 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
Reference
이 문제에 관하여(plist 파일 대신 YAML을 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kitsuyui/items/d254d3f0ba84c6a5d04d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
StandardOutPath: /tmp/sample-output.txt
StartInterval: 60
ProgramArguments:
- /usr/local/bin/terminal-notifier
- -message
- はろー
Label: sample-launchd
$ yaml2json < some_daemon.yaml | plutil -convert xml1 - -o some_daemon.plist
$ launchctl load some_daemon.plist
스스로는 시도하지 않지만 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
Reference
이 문제에 관하여(plist 파일 대신 YAML을 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kitsuyui/items/d254d3f0ba84c6a5d04d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)'
$ brew install terminal-notifier
Reference
이 문제에 관하여(plist 파일 대신 YAML을 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kitsuyui/items/d254d3f0ba84c6a5d04d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)