Пилоны на OS X: правильный launchd plist для запуска и поддержания живого сервера пилонов?


Update: это была просто ошибка импорта в приложении Pylons (потому что $PYTHONPATH отличается при запуске задания launchd), которая вызвала цикл fail-respawn. Большое спасибо тем, кто посоветовал мне посмотреть мои журналы.

Привет всем,

Я на OS X, пытаюсь настроить задание launchd, чтобы запустить и сохранить живым мое приложение pylons.

Я загружаю работу как обычно:

sudo launchctl unload /Library/LaunchDaemons/dvlf.plist

Я не вижу никаких ошибок в терминале. Сервер никогда не появляется. Вместо этого я вижу это на экране. консоль:

4/12/11 6:23:57 PM  com.apple.launchd[1]    (com.dvlf.pylons) Throttling respawn: Will start in 9 seconds

Вот .файл 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>Disabled</key>
    <false/>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>com.dvlf.pylons</string>
    <key>EnvironmentVariables</key>
        <dict>
                <key>PYTHON_EGG_CACHE</key>
                <string>/tmp/.python-eggs</string>
        </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/paster</string>
        <string>serve</string>
        <string>--reload</string>
        <string>/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/production.ini</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>Umask</key>
    <integer>7</integer>
    <key>UserName</key>
    <string>_www</string>
    <key>WorkingDirectory</key>
    <string>/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/</string>
    <key>StandardErrorPath</key>
    <string>/var/log/dvlf_paster_error.log</string>
    <key>StandardOutPath</key>
    <string>/var/log/dvlf_output.log</string>
</dict>
</plist>
2 2

2 ответа:

Когда я видел "слишком быстрое возрождение" в системах SysV init (/etc/inittab записи), это было потому, что рассматриваемая программа использовала традиционную стратегию "double fork, then exec", чтобы стать демоном. Многие такие программы (такие как sshd и sylogd) поддерживают ключи командной строки (- D для sshd , например), которые предписывают им воздерживаться от fork()-ing.

Проблема в том, что init (и предположительно launchd) пытаются контролировать процесс, чтобы справиться с их возрождением, если / когда они выйдут. Когда программа пытается поставить себя в фоновом режиме (отключиться от родительского процесса, группы процессов и всех связанных с ними операций обработки сигналов), то это обнаруживается как почти немедленный выход, который требует возрождения. inittab (и, опять же, предположительно launchd) накладывают ограничение скорости, чтобы одна неудачная программа не заставляла систему чрезмерно загружаться.

Решение этой проблемы проблема смотрите, можете ли вы настроить этот dvlfs.пилоны Программа для запуска на переднем плане или " не отсоединять "или" не демонизировать"... терминология на этот счет.

Сообщение respawn обычно возникает из-за сбоя процесса вскоре после запуска, вероятно, из-за плохой конфигурации. Итак, Проверьте свои лог-файлы.

Из плиста: у вас действительно есть эти dirs/файлы? (проверьте все пути в вашем plist-самая распространенная ошибка)

/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/production.ini
/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/

Если нет, то вам следует заново отредактировать свой plist.