launchd не дает мне “такого файла или каталога” ошибка

мой .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>
5
задан 03.03.2011, 17:23

1 ответ

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(), и правильная вещь произойдет.

10
ответ дан 21.11.2019, 09:13

Теги

Похожие вопросы