мой .plist похож ниже... В /var/log.system.log I видят
(com.example.exampled[24728]): posix_spawn("/usr/local/bin/ruby /Users/radek/Sites/sinatrasvn/web.rb", ...): No such file or directory
(com.example.exampled[24728]): Exited with exit code: 1
(com.example.exampled): Throttling respawn: Will start in 10 seconds
но если я работаю /usr/local/bin/ruby /Users/radek/Sites/sinatrasvn/web.rb
сценарий хорошо работает. Какая-либо идея?
<?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>com.example.exampled</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/ruby /Users/radek/Sites/sinatrasvn/web.rb</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
launchd
не использует оболочку для запущения программ; это использует exec
системный вызов. Поэтому plist у Вас есть выше использования массив.
Вы устанавливаете единственный элемент того массива к строке, содержащей пространство, которое ведет launchd
попытаться к exec("/usr/local/bin/ruby /Users/radek/Sites/sinatrasvn/web.rb")
— который, конечно же, не является названием файла. Вместо этого Вы хотите установить массив:
<array>
<string>/usr/local/bin/ruby</string>
<string>/Users/radek/Sites/sinatrasvn/web.rb</string>
</array>
Это передаст пути как отдельные аргументы exec()
, и правильная вещь произойдет.