web-dev-qa-db-ja.com

launchctlはプログラムを開始しますが、pidをリストしません

私はこの問題のトラブルシューティングをしばらく行っています。 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をリストしないのはなぜですか?

これまでに試したこと

  1. Plistファイルの変更、パラメーターの最小化、KeepAliveなし、OnDemandなし、プログラムパラメーターのインクルード
  2. 所有権の変更admin:wheel nsadmin:nsadmin admin:root
  3. / Library/LaunchAgentsディレクトリを介してLaunchAgentとして実行

これが私がしたことです:

/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で管理したいと思います。これは、プロセスの開始では機能しますが、プロセスの再開では機能しません。

他の誰かがこの問題に遭遇しましたか?この問題を解決するために変更できる私のアプローチに明らかに問題がありますか?

2
Mike F

ProgramArguments配列から-f(フォアグラウンド)フラグを残したようです。それがないと、naviserverはバックグラウンドで再実行して終了します。つまり、launchdは(バックグラウンドの)サーバープロセスのPIDを認識しません。

2
Gordon Davisson