#python #macos #plist #pylons #launchd
#python #macos #список #pylons #launchd
Вопрос:
Обновление: это была просто ошибка импорта в приложении Pylons (потому что $ PYTHONPATH отличается при выполнении задания launchd), которая вызывала цикл восстановления после сбоя. Большое спасибо тем, кто посоветовал мне посмотреть мои журналы.
Всем привет,
Я на 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>
Комментарии:
1. Необходимо создать дополнительные пилоны. Если вы не можете, попробуйте собрать больше минералов.
2. Ах да, минералы, собираю урожай, я сейчас вернусь.
3. Каково содержимое этих файлов журнала? Можете ли вы включить их в проблему?
4. Крис Р. — возможно, ваш комментарий действительно привел меня к решению этой проблемы. Я сообщу об этом позже.
Ответ №1:
Когда я видел «слишком быстрое возрождение» в системах инициализации SysV (записи в / etc / inittab), это было потому, что рассматриваемая программа использовала традиционную стратегию «double fork, затем exec», чтобы стать демоном. Многие подобные программы (такие как sshd и sylogd) поддерживают переключатели командной строки (например,-D для sshd), которые предписывают им воздерживаться от fork()
-ing.
Проблема в том, что init (и, предположительно, launchd) пытаются отслеживать процесс, чтобы обработать их повторное создание, если / когда они завершатся. Когда программа пытается перевести себя в фоновый режим (отключиться от родительского процесса, группы процессов и всей связанной с ними обработки сигналов), это определяется как почти немедленный выход, который требует повторного запуска. inittab (и, опять же, предположительно, launchd) вводят ограничение скорости, чтобы одна отказывающая программа не загружала систему чрезмерно.
Решение этой проблемы посмотрите, можете ли вы настроить эту программу dvlfs.pylons для запуска на переднем плане или «не отсоединять» или «не демонизировать» … соответствующая терминология.
Комментарии:
1. Спасибо, Джим, это действительно приятно знать. В моем случае, я думаю, что возрождение вызвано ошибкой, которая останавливает процесс, на что указывает предложение Криса проверить журналы (да). Однако, если это не решит проблему, я обязательно проверю, использует ли сервер pylons paster трюк с двойным форком-exec и может ли это сыграть здесь роль.
Ответ №2:
Сообщение о повторном запуске обычно появляется из-за сбоя процесса вскоре после запуска, вероятно, из-за плохой конфигурации. Итак, проверьте свои файлы журналов.
Из списка: у вас действительно есть эти каталоги / файлы? (проверьте весь путь в вашем списке — самая распространенная ошибка)
/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/production.ini
/Volumes/w/artfl/projects/dodgr/servers/pylons/DODGR/
если нет, вам следует повторно отредактировать свой список.