Macos OSX为什么我的launchagent进程以根用户而不是当前用户身份启动

Macos OSX为什么我的launchagent进程以根用户而不是当前用户身份启动,macos,launch-agent,Macos,Launch Agent,我想以当前用户的身份运行该进程。但它是从根开始的。如何以当前用户的身份启动流程 此脚本在OSX包中的postinstall中运行。使用pkgbuild进行打包 与我如何在Xcode中构建命令行工具有什么关系吗 NAME="myapp" SCPROXY_INSTALLATION_DIR="/opt/local/bin" # Script identifier (same as package identifier). IDENTIFIER="com.mycomp.myapp" LAUNCH_A

我想以当前用户的身份运行该进程。但它是从根开始的。如何以当前用户的身份启动流程

此脚本在OSX包中的postinstall中运行。使用pkgbuild进行打包

与我如何在Xcode中构建命令行工具有什么关系吗

NAME="myapp"
SCPROXY_INSTALLATION_DIR="/opt/local/bin"

# Script identifier (same as package identifier).
IDENTIFIER="com.mycomp.myapp"

LAUNCH_AGENT_PLIST="/Library/LaunchAgents/$IDENTIFIER.plist"

# Write LaunchDaemon plist file.
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">

<dict>
<key>Label</key>
<string>'$IDENTIFIER'</string>
<key>ProgramArguments</key>
<array>
<string>'$SCPROXY_INSTALLATION_DIR/$NAME'</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/scproxy.log</string>
<key>StandardErrorPath</key>
<string>/var/log/scproxy.log</string>
<key>Debug</key>
<true/>

</dict>
</plist>' > "$LAUNCH_AGENT_PLIST"

/bin/launchctl unload  $LAUNCH_AGENT_PLIST
/bin/launchctl load  $LAUNCH_AGENT_PLIST

#exit 0
# Check LaunchDaemon is loaded.
STATUS=`/bin/launchctl list | /usr/bin/grep $IDENTIFIER | /usr/bin/awk '{print $3}'`

if [ "$STATUS" = "$IDENTIFIER" ]
then
echo "Success: LaunchAgent loaded."
exit 0
else
echo "Error: LaunchAgent not loaded."
exit 1
fi
NAME=“myapp”
SCPROXY_INSTALLATION_DIR=“/opt/local/bin”
#脚本标识符(与包标识符相同)。
IDENTIFIER=“com.mycomp.myapp”
LAUNCH_AGENT_PLIST=“/Library/LaunchAgents/$IDENTIFIER.PLIST”
#写入LaunchDaemon plist文件。
回声'
标签
“$IDENTIFIER”
程序参数
“$SCPROXY\u安装\u目录/$NAME”
运行负荷
持久连接
标准门诊
/var/log/scproxy.log
标准错误路径
/var/log/scproxy.log
调试
“>“$LAUNCH\u AGENT\u PLIST”
/bin/launchctl卸载$LAUNCH\u代理\u PLIST
/bin/launchctl加载$LAUNCH\u代理\u PLIST
#出口0
#检查是否加载了LaunchDaemon。
状态=`/bin/launchctl list |/usr/bin/grep$IDENTIFIER |/usr/bin/awk'{print$3}'`
如果[“$STATUS”=“$IDENTIFIER”]
然后
echo“成功:已加载LaunchAgent。”
出口0
其他的
echo“错误:未加载LaunchAgent。”
出口1
fi

您正在将Launch Agent plist添加到系统级Launch Agent目录,它将仅以root/admin权限启动应用程序。您需要将launchagents放置在用户级launchagents目录中,该目录为USER\u HOME/Library/launchagents/,例如:/Users/mani/Library/launchagents/

另外,如果您要以当前用户身份运行应用程序,那么日志路径无效,因为当前用户没有权限写入日志/var/log。因此,您还需要更改日志目录

还可以作为当前用户而不是管理员/根用户从launchctl加载和卸载


您正在将Launch Agent plist添加到系统级Launch Agent目录,它将仅以root/admin权限启动应用程序。您需要将launchagents放置在用户级launchagents目录中,该目录为USER\u HOME/Library/launchagents/,例如:/Users/mani/Library/launchagents/

另外,如果您要以当前用户身份运行应用程序,那么日志路径无效,因为当前用户没有权限写入日志/var/log。因此,您还需要更改日志目录

还可以作为当前用户而不是管理员/根用户从launchctl加载和卸载


那是因为你把你的*plist放在LaunhDaemons里了。LaunchDeamon中的所有*.plist都将在ROOT中运行。
您需要将*.plist放入LaunchAgent。它可以是/Library/LaunchAgents或System/Library/LaunchAgents,因为您将*plist放在LaunhDaemons中。LaunchDeamon中的所有*.plist都将在ROOT中运行。
您需要将*.plist放入LaunchAgent。它可以是/Library/LaunchAgents或System/Library/LaunchAgents

从pkg安装时,我正在postinstall中运行此脚本。我将myapp保存在$HOME/Library/LaunchAgents/中,但它仍以root身份运行。您需要保留plist文件$HOME/Library/LaunchAgents,应用程序可以保存在/Applications中。然后,您可以通过launchctl load~/Library/LaunchAgents/${PLISTFILE}作为当前用户加载/卸载。我将myapp保存在$HOME/Library/LaunchAgents/中,但它仍以root身份运行。您需要保留plist文件$HOME/Library/LaunchAgents,应用程序可以保存在/Applications中。然后可以通过launchctl load~/Library/LaunchAgents/${PLISTFILE}作为当前用户加载/卸载。