OSX, почему процесс запуска моего агента запускается от имени пользователя root вместо текущего пользователя

Я хочу запустить процесс как текущий пользователь. Но это начинается как root. Как я могу начать процесс как текущий пользователь?

Этот скрипт запускается в postinstall в пакете OSX. Упаковка с использованием 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

2 ответа

Вы добавляете Plist Launch Agent в каталог агентов запуска на системном уровне, он запускает только приложения с привилегиями root / admin. Вам нужно поместить агенты запуска в каталог "Агенты запуска уровня USER", который находится по адресу USER_HOME / Library / LaunchAgents /, например: / Users / mani / Library / LaunchAgents /.

Кроме того, если вы собираетесь запускать приложение как текущий пользователь, то пути к журналам будут недействительными, поскольку текущий пользователь не будет иметь прав для записи журнала в / var / log. Поэтому вам также необходимо изменить каталог журналов.

Также загружайте и выгружайте из launchctl как текущий пользователь, а не как администратор / пользователь root.

https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html

Это потому, что вы положили свой * список в LaunhDaemons. Весь *.plist в LaunchDeamon будет работать в ROOT. Вы должны поместить свой *.plist в LaunchAgent. это может быть /Library/LaunchAgents или System/Library/LaunchAgents

Другие вопросы по тегам