Что означает статус запуска 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>
Ответы
Ответ 1
Я прочитал man launchctl
, найдите 78 означает function not implemented
. Это не очень помогает.
Наконец, я заработал, на самом деле были ошибки в plist, я рекомендую установить brew cask install launchcontrol
, который является инструментом gui для launchctll, он может помочь обнаружить ошибки и проблемы при съемке.
Ответ 2
[Иди в эту проблему, так документируя, что я нашел]
"78" - это последний код выхода выполняемого вами задания. От man launchctl
:
Без аргументов перечислите все задания, загруженные в launchd в три колонны. В первом столбце отображается PID задания, если он запущен, нин. Второй столбец отображает последний статус выхода задания. Если число в этом столбце отрицательное, оно представляет собой отрицательный сигнал, который прекратил работу. Таким образом, "-15" указывает, что работа была прекращена с помощью SIGTERM. Третья колонка - это метка задания. Если указано [label], выводится информация о запрошенном задании.
т.е. вам необходимо прочитать документацию (или исходный код) для любой работы, которую вы запускаете. (В моем случае mysqld)
Стоит отметить, что "78" упоминается как стандартный код выхода в Linux, что указывает на ошибку конфигурации. Поэтому взгляните на конфигурацию своей работы (и журналы ошибок?), Чтобы узнать, есть ли у вас что-то неправильно сконфигурированное.
Ответ 3
Вот что меня поймало: в Mac OS X вы можете запускать shell-скрипты из командной строки, даже если в файле есть только "w370".
Однако, когда вы запускаете их с помощью запуска, вы должны указать, в каком двоичном файле следует запустить script.
Предположим, что при запуске из командной строки он просто использует оболочку, в которой вы сейчас находитесь (в моем случае bash), но при запуске из launchd не существует "окружения script".
Я добавил
#!/bin/sh
в качестве первой строки в файле script, а затем она сработала.
Ответ 4
Я получил эту ошибку, пытаясь запустить моно, чтобы запустить локальный веб-сервер. Оказывается, исправление заключалось в том, чтобы не использовать монофонический путь, заданный "mono" (символическая ссылка: /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono
), но фактическое местоположение exe (в моем случае /Library/Frameworks/Mono.framework/Commands/mono
).
Ответ 5
Я обнаружил, что ошибка связана с разрешениями.
Я был тем, что пытался перенаправить ошибки и журналы в каталог /var/log (который мой пользователь не умеет писать!)
изменив путь к чему-то, где мой пользователь имел соответствующие разрешения, исправил его.
Будьте внимательны при загрузке ваших LaunchAgents. Не используйте sudo для загрузки plist, если вы находитесь в каталоге ~/Library/LaunchAgents.