2012-05-20 4 views
4

Я следующий PLIST файл в ~/Library/LaunchAgents:"привет мир" PLIST не запуск программ работает

<?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>com.yogapo.test_launchd</string> 

    <key>Program</key> 
    <string>. /Users/luke/dev/data_yogapo/script/test_launchd.sh</string> 

    <key>StartInterval</key> 
    <integer>10</integer> 

    <key>RunAtLoad</key> 
    <true/> 
    </dict> 
</plist> 

И файл test_launchd.sh это содержит следующее:

#! /bin/bash 

echo "hello world from test_launchd.sh" >> /Users/luke/dev/data_yogapo/log/development.log 

Когда Я бегу test_launchd.sh вручную с
. /Users/luke/dev/data_yogapo/script/test_launchd.sh результаты, как и ожидалось: линия появляется в конце development.log

Но когда я загрузить этот файл Plist, ничего не происходит:

$ cd ~/Library/LaunchAgents 
$ launchctl load com.yogapo.test_launchd.plist 
$ launchctl list | grep yogapo 
    -  1  com.yogapo.test_launchd 

Я попытался это и без ключа RunAtLoad. Я посмотрел на другие ответы здесь, как на SO, так и в других местах в Интернете. Я следил за учебниками, и просто ничего не происходит. Любая помощь очень ценится - спасибо!

ответ

7

Вы просите launchd запустить Progam называется

". /Users/luke/dev/data_yogapo/script/test_launchd.sh" 

Он будет принимать все значения ключа Program в качестве первого аргумента execvp (см man execvp(3) для более подробной информации)

Если бы вы были просмотрите журнал system, вы увидите что-то вроде:

22 мая 21:17:38 dented com.apple.launchd .peruser.501 [202] (com.yogapo.test_launchd [32986]): posix_spawn (". /Users/luke/dev/data_yogapo/script/test_launchd.sh ", ...): Нет такого файл или каталог 22 мая 21:17:38 dented com.apple.launchd.peruser.501 [202] (com.yogapo.test_launchd [32986]): выбрасываемые с кодом выхода:. 1

launchd не оболочка Однако, он может интерпретировать последовательности символов хэша-паф, чтобы определить, какую программу использовать для интерпретации сценария. Поэтому просто указать скрипт в качестве программы для запуска:

<key>Program</key> 
<string>/Users/luke/dev/data_yogapo/script/test_launchd.sh</string> 

Примечание: Если вам нужно передать аргументы в свой скрипт, используйте вместо этого клавишу ProgramArguments и поместите туда всю командную строку. Например:

<key>ProgramArguments</key> 
<string>/Users/luke/dev/data_yogapo/script/test_launchd.sh arg1 arg2 arg3</string> 
+3

Обратите внимание, что если вы используете ключ ProgramArguments, Вы не можете использовать программу key - просто введите имя программы в первую строку в массиве. –

+0

@ booch Спасибо. Я изменю записку. –

Смежные вопросы