что означает launchd status 78?? почему мой пользовательский агент не работает??

Я хочу запустить службу синхронизации unison, работающую в фоновом режиме при входе в систему. Но код статуса моего агента 78. Я не знаю, почему, я попробовал некоторые исправления, опубликованные в интернете, но это просто не работает.

в чем проблема?? ниже приведен файл 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>Label</key>
    <string>syncmyproject</string>
    <key>StandardOutPath</key>
    <string>/var/log/syncmyproject.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/syncmyproject.log</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>Debug</key>
    <true/>
    <key>EnableGlobbing</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/unison</string>
      <string>-auto</string>
      <string>-batch</string>
      <string>-repeat watch</string>
      <string>~/home/project</string>
      <string>~/project</string>
    </array>
</dict>
</plist>

6 ответов


я прочитала man launchctl найти 78 означает function not implemented. Это не очень помогает.

наконец, я заставляю его работать, на самом деле были ошибки в plist, я рекомендую установить brew cask install launchcontrol, который является инструментом gui для launchctl, он может помочь обнаружить ошибки и устранение неполадок.


[столкнулся с этой проблемой, так что документирование того, что я нашел]

" 78 " - это последний код выхода из выполняемого задания. От man launchctl:

без аргументов перечислите все задания, загруженные в launchd в трех столбцы. В первом столбце отображается PID задания, если оно выполняется- Нин. во втором столбце отображается последнее состояние выхода задания. Если число в этом столбце отрицательное, оно представляет собой отрицательное сигнал что остановило работу. Таким образом, "-15" будет означать, что работа была прекращена с SIGTERM. Третий столбец-это метка задания. Если указан параметр [label], выводится информация о запрошенном задании.

т. е. вам нужно прочитать документацию (или исходный код) для любой работы, которую вы начинаете. (В моем случае mysqld)

стоит отметить, что "78" упоминается как стандартный выходной код в Linux, что указывает на ошибку конфигурации. Так возьми ... посмотрите на свою конфигурацию работы (и журналы ошибок?) чтобы увидеть, если у вас есть что-то неправильно.


Я обнаружил, что ошибка связана с разрешениями. Я пытался перенаправить ошибки и журналы в каталог /var/log (в который мой пользователь не может писать!) изменение пути к чему-то, где у моего пользователя были правильные разрешения, исправило его.

будьте осторожны при загрузке LaunchAgents. Не используйте sudo для загрузки plist, если вы находитесь в каталоге ~/Library/LaunchAgents.


вот что меня поймало: в Mac OS X вы можете запускать shell-скрипты из командной строки, даже если в файле есть "только скрипт". Однако, когда вы запускаете их из launchd, вы должны сказать, какой двоичный файл должен запускать скрипт. Предположим, что при запуске из командной строки он просто использует оболочку, в которой вы находитесь (в моем случае bash), но при запуске из launchd нет "окружающего скрипта". Я добавил

#!/bin/sh

как первая строка в файле скрипта, а затем работал.


Я получил эту ошибку при попытке запустить mono для запуска локального веб-сервера. Оказывается, исправление состояло в том, чтобы не использовать путь mono, заданный "which mono" (который является символической ссылкой: /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono) но фактическое местоположение exe (в моем случае /Library/Frameworks/Mono.framework/Commands/mono).


подобно выше, я получал статус 78, потому что у меня была символическая ссылка в моем пути сценария. Исправление состояло в использовании абсолютного пути.