Подтвердить что ты не робот

ОЧЕНЬ простая панель запуска не запускает мой script

Я пытаюсь понять, почему мой запуск script не работает. Это очень просто, но я новичок в среде Mac и стараюсь привыкнуть. Вот мой plist. Я знаю, что требуется ProgramArguments, поэтому я просто помещаю туда путь script.

<?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.tomcat.plist</string>   
  <key>ProgramArguments</key>  
  <array>  
    <string>/opt/apache-tomcat-5.5.27/bin/startup.sh</string>  
  </array>  
  <key>OnDemand</key>  
  <false/>  
</dict>  
</plist>

Когда я пытаюсь запустить launchctl load <name>, он, кажется, правильно загружается (при этом он не дает мне никаких сообщений об ошибках), но script, похоже, не выполняется, даже при перезагрузке.

Я использовал все примеры, которые я нашел в Интернете, и я не могу понять, почему это не запускает мой script при запуске.

4b9b3361

Ответ 1

На всякий случай, если кто-то еще сталкивается с этой проблемой и уже имеет <key>RunAtLoad</key><true/> в своем plist, я хочу предоставить некоторые дополнительные решения.

Двойные проверки разрешений, чтобы убедиться, что ваш script является исполняемым (найдите "x" ):

ls -l /opt/apache-tomcat-5.5.27/bin/startup.sh

При необходимости измените разрешения:

chmod +x /opt/apache-tomcat-5.5.27/bin/startup.sh

Также сначала запустите script и убедитесь, что он работает:

/opt/apache-tomcat-5.5.27/bin/startup.sh

Если script является исполняемым и работает отлично, попробуйте отменить системный журнал для отладки launchd:

sudo launchctl log level debug 
tail -f /var/log/system.log

Флаг -f (в основном) постоянно показывает конец (последние записи) журнала. Вы можете удалить этот флаг, чтобы просто распечатать моментальный снимок конца журнала. Если вы используете этот флаг, вам нужно будет открыть новый терминал для запуска других команд. Нажмите CTRL + C, чтобы завершить сеанс хвоста. Для получения дополнительной информации:

man tail

Когда вы закончите отладку:

sudo launchctl log level error

Существуют и другие уровни журналов. Для получения дополнительной информации:

man launchctl

Если вы внесете какие-либо изменения в script или plist, убедитесь, что вы перезагрузите plist. Например:

launchctl unload ~/Library/LaunchAgents/com.tomcat.plist
launchctl load ~/Library/LaunchAgents/com.tomcat.plist

Если вы ТОЛЬКО внесли изменения в script и NOT plist, вы можете просто перезапустить plist:

launchctl stop com.tomcat.plist
launchctl start com.tomcat.plist

Если вы добавите в свой слой следующее значение ключа:

<key>KeepAlive</key>
<true/>

Затем вы можете просто запустить:

launchctl stop com.tomcat.plist

И он перезапустится автоматически.

Если это не помогает, и у вас возникают проблемы с настройкой Tomcat на OS X, этот учебник может помочь.

Ответ 2

Чтобы ваш script запускался автоматически при вызове загрузки launchct, вам нужно добавить: -

<key>RunAtLoad</key>
<true/>

В качестве альтернативы вы можете использовать: -

launchctl start com.tomcat.plist

Ответ 3

Хотя я полагаю, что у большинства людей такой проблемы не возникнет, я полагаю, что ее стоит поставить здесь, поскольку я потратил почти два часа, пытаясь выяснить, почему не launchd load несмотря на возврат кода выхода 0.

Проблема была проста. У моего файла plist было неправильное расширение (у меня было " plst "), и launchctl молча отказывался загружать файл. Изменение расширения на plist решило проблему.