私はこの問題のトラブルシューティングをしばらく行っています。 Web、いくつかのスタック交換プラットフォーム、およびディスカッションフォーラムを参照しました。これが私の問題の説明です:
ユースケース:
Mac os x el capitan10.11.6にnaviserverをインストールしています
電話する代わりに
/usr/local/ns/bin/nsd -f -u nsadmin -g nsadmin -t /usr/local/ns/conf/nsd-config.tcl
サーバーを起動し、サーバーを停止するkillコマンドを実行するには、LaunchDaemonを使用してサーバーを管理します。
問題の説明:
launchctl
を介してLaunchDaemonを正常に開始できます。ただし、launchctl
リストを見ると、PIDなしのplistがリストされています。したがって、kill
を使用してサービスを手動で停止する必要があります。代わりに、launchctl stop
を使用してサービスを停止できるようにします。
本質的な質問:
launchctlがLaunchDaemonを正常に開始したPIDをリストしないのはなぜですか?
これまでに試したこと
これが私がしたことです:
/Library/LaunchDaemons/org.naviserver.dev01.plist
の下に次の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
現在、私は常にPIDを介してkill
を介してサーバーを手動で再起動していますが、これは適切ではありません。これをlaunchctl
で管理したいと思います。これは、プロセスの開始では機能しますが、プロセスの再開では機能しません。
他の誰かがこの問題に遭遇しましたか?この問題を解決するために変更できる私のアプローチに明らかに問題がありますか?
ProgramArguments
配列から-f
(フォアグラウンド)フラグを残したようです。それがないと、naviserverはバックグラウンドで再実行して終了します。つまり、launchdは(バックグラウンドの)サーバープロセスのPIDを認識しません。