我为我的应用创建了一个Mac Launch Agent。启动代理工作正常。但是,当exe在终端中启动并且所有这些消息都记录到Mac控制台时,可执行bin文件会打印一些控制台消息。如何跳过将这些消息记录到Mac控制台..?
我尝试添加一个shell脚本作为Lauch Agent,它启动了exe,因此可执行文件不会将消息记录到控制台。但剧本并没有启动垃圾箱。
这是我的Launch Agent 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>com.myapp</string>
<key>Program</key>
<string>./bin/MyBin</string>
<key>WorkingDirectory</key>
<string>/Applications/MyApp/</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
答案 0 :(得分:3)
您可以通过向.plist文件添加StandardOutPath
和StandardErrorPath
键来覆盖stdout和stderr对launchd作业的默认处理。要丢弃所有输出,请添加:
<key>StandardOutPath</key>
<string>/dev/null</string>
<key>StandardErrorPath</key>
<string>/dev/null</string>
您还可以将其中一个或两个重定向到日志文件。
答案 1 :(得分:2)
最简单的方法是戈登戴维森上面所说的。但是当我需要启动多个可执行文件时,它可以通过shell脚本实现。
这是我的剧本:
#!/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填满,但没有我的应用程序的迹象。令人惊讶的是当我删除了'&amp;'从脚本开始,启动代理开始正常工作。
./bin/MyBin 1>/dev/null 2>/dev/null & echo $! > proc.pid
已更改为
./bin/MyBin 1>/dev/null 2>/dev/null
我不确定Mac为什么将后台进程作为launchd的一个区别。剧本是&amp;当我手动运行它时,工作正常。
答案 2 :(得分: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