2

アプリ用のMacLaunchAgentを作成しています。Launchエージェントは正常に機能します。ただし、exeがターミナルで起動され、それらのメッセージがすべてMacコンソールに記録されると、実行可能binファイルはいくつかのコンソールメッセージを出力します。これらのメッセージのMacコンソールへのログ記録をスキップするにはどうすればよいですか..?

実行可能ファイルがコンソールにメッセージを記録しないように、exeを起動するLauchAgentとしてシェルスクリプトを追加しようとしました。ただし、スクリプトはビンを開始しません。

これは私のLaunchAgentplistファイルです。

 <?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>com.myapp</string>
  <key>Program</key>
  <string>./bin/MyBin</string>
  <key>WorkingDirectory</key>
  <string>/Applications/MyApp/</string>
  <key>RunAtLoad</key>
  <true/>
  </dict>
  </plist>
4

3 に答える 3

4

.plistファイルにキーStandardOutPathとキーを追加することで、起動されたジョブのstdoutとstderrのデフォルトの処理をオーバーライドできます。StandardErrorPathすべての出力を破棄するには、次を追加します。

<key>StandardOutPath</key>
<string>/dev/null</string>
<key>StandardErrorPath</key>
<string>/dev/null</string>

一方または両方をログファイルにリダイレクトすることもできます。

于 2012-07-04T22:15:29.713 に答える
2

最も簡単な方法は、GordonDavissonが上で述べたとおりです。ただし、複数の実行可能ファイルを起動する必要がある場合は、シェルスクリプトで実行できます。

これは私のスクリプトでした:

  #!/bin/bash
  cd /Applications/MyApp/
  dates=`date`
  echo "Exe Started at ::: ${dates}" > proc.log
  # Starting Exe
  ./bin/MyBin 1>/dev/null 2>/dev/null & echo $! > proc.pid

このスクリプトで問題が発生しました。proc.logがいっぱいになっているのがわかりますが、アプリの兆候はありません。驚いたことに、スクリプトから「&」を削除すると、起動エージェントが正常に機能し始めました。

   ./bin/MyBin 1>/dev/null 2>/dev/null & echo $! > proc.pid

に変更されました

   ./bin/MyBin 1>/dev/null 2>/dev/null

Macが起動時の違いとしてバックグラウンドプロセスを作成している理由がわかりません。スクリプトを手動で実行すると、スクリプトはそのままで正常に動作していました。

于 2012-07-04T19:30:06.183 に答える
1

出力は、プロセスが開始する前にのみリダイレクトできます。この場合、すべてのコードを変更したくない場合は、起動エージェントの実行可能ファイルをスクリプトにする必要があります。その後、スクリプトは必要に応じてリダイレクトできます。

#!/bin/sh
# redirect to a log file, /dev/null, or wherever it should go;
# this is just an example log file destination
`/usr/bin/dirname $0`/run_real_agent > /tmp/my_agent.$$.log 2>&1
于 2012-07-04T18:31:38.480 に答える