Похоже, вы оставили -f
флаг (передний план) вне ProgramArguments
массива. Без этого naviserver перезапускается в фоновом режиме и затем завершается, что означает, что launchd не знает PID (фонового) серверного процесса.
launchctl запускает программу, но не перечисляет pid
Я уже давно устраняю эту проблему. Посоветовался с сетью, несколькими платформами для обмена стеками и дискуссионными форумами. Вот мое описание проблемы:
USECASE:
У меня есть Naviserver установлен на Mac OS X El Capitan 10.11.6
Вместо звонка
/usr/local/ns/bin/nsd -f -u nsadmin -g nsadmin -t /usr/local/ns/conf/nsd-config.tcl
чтобы запустить сервер и команду kill, чтобы остановить сервер, я хотел бы управлять им через LaunchDaemon.
Описание проблемы:
Я могу успешно запустить LaunchDaemon launchctl
. Однако при просмотре launchctl
списка он перечисляет список без PID. Поэтому мне нужно вручную остановить службу через kill
- вместо этого я хотел бы иметь возможность остановить службу с launchctl stop
.
Вопрос по существу:
Почему launchctl не перечисляет PID успешно запущенного LaunchDaemon?
Что я пробовал до сих пор
- Изменение файла plist, сведение к минимуму параметров, без KeepAlive, без OnDemand, включает параметр Program
- Смена владельца admin: колесо nsadmin: nsadmin admin: root
- Запуск в качестве LaunchAgent через каталог / Library / LaunchAgents
Вот что я сделал:
У меня есть следующий лист под /Library/LaunchDaemons/org.naviserver.dev01.plist
<?xml version=“1.0” encoding=“UTF-8”?> <!DOCTYPE plist PUBLIC “-//Apple Computer//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”> <plist version=“1.0”> <dict> <key>Label</key> <string>org.naviserver.dev01</string> <key>ProgramArguments</key> <array> <string>/usr/local/ns/bin/nsd</string> <string>-u</string> <string>nsadmin</string> <string>-g</string> <string>nsadmin</string> <string>-t</string> <string>/usr/local/ns/conf/nsd-config.tcl</string> </array> <key>StandardOutPath</key> <string>/usr/local/var/log/naviserver_daemon.log</string> <key>StandardErrorPath</key> <string>/usr/local/var/log/naviserver_daemon.log</string> </dict> </plist>
Применяются следующие привилегии и права собственности
-rw-r--r-- 1 root admin 857 Aug 11 15:03 org.naviserver.dev01.plist
Запуск сервисных работ
sudo launchctl load org.naviserver.dev01.plist sudo launchctl start org.naviserver.dev01
Однако в списке launchctl не отображается PID службы
sudo launchctl list | grep naviserver - 0 org.naviserver.dev01
Я могу найти запущенный процесс через
ps -ax | grep nsd
В настоящее время я всегда вручную перезагружаю сервер через kill
PID, что не очень приятно. Я хотел бы справиться с этим, с помощью launchctl
которого можно запустить процесс, а не остановить его снова.
Кто-нибудь еще сталкивался с этой проблемой, и есть ли что-то явно не так с моим подходом, который я могу изменить, чтобы решить эту проблему?
1 ответ на вопрос
Похожие вопросы
-
3
Ускорение загрузки OS X на годичной MBP
-
3
Как повторно связать резервную копию Airport Time Machine после перехода на новый Mac?
-
6
Как вы отключите звук запуска на Mac?
-
-
5
Почему мой Macbook сильно нагревается при использовании Boot Camp?
-
7
Есть ли в Mac OS X эквивалент Ctrl + Tab?
-
6
Способ переноса данных Time Machine на новый диск
-
13
Сброс положения Mac OS X Windows после отсоединения внешнего монитора
-
10
Программное обеспечение для резервного копирования для Mac OS X
-
5
Как удалить и удалить .kext в Mac OS X?
-
4
Как переназначить клавишу извлечения на клавиатуре MacBook, чтобы «удалить»?