Launchd не дает апачу (XAMPP) весь priviledges при запуске

Я использую Mac OS X и использую Launchd для автоматического запуска XAMPP. Я установил апачский пользовательский набор для совпадения с моим именем учетной записи в httpd.conf

User cwd
Group nogroup

Ну, если я просто позволяю запуску компьютера, и если я выполняю сценарий PHP с этими командами, вот то, что я получаю:

echo exec('whoami'); //cwd
exec('echo 1234 | pbcopy');
echo exec('pbpaste'); // (nothing)

Однако, если я останавливаю XAMPP и перезапускаю его (использующий Управление XAMPP), затем он работает как ожидалось, и результатом третьей строки является 1234.

echo exec('pbpaste'); // 1234

У меня также есть подобный опыт с выполнением других системных команд с exec или shell_exec как ssh. Они, кажется, не работают, пока я вручную не перезапускаю апача. У кого-либо есть anythoughts на этом?

Вот мой файл конфигурации запуска:

/Library/LaunchDaemons/xampp.sql.startapache.plist

<?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>EnableTransactions</key>
<true/>
<key>Label</key>
<string>xampp.startapache.mysql</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/XAMPP/xamppfiles/xampp</string>
<string>startmysql</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/Applications/XAMPP/xamppfiles</string>
<key>KeepAlive</key>
<false/>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
0
задан 05.04.2011, 03:35

1 ответ

Это не вещь полномочия, это - потому что pbcopy и pbpaste нужен сервер области монтажа (по существу, фоновая программа, которая содержит область монтажа), и это выполняется как часть пользовательской сессии входа в систему. launchd выполняет апача в системном контексте, таким образом, нет никакого доступного сервера области монтажа (обратите внимание, что даже при том, что апач переключает пользователей на cwd, это не то же как присоединение к Вашей сессии входа в систему).

Мог бы быть способ присоединиться к конкретной сессии входа в систему (вовлечение launchctl bsexec), но для веб-сервиса это было бы плохой идеей. Во-первых, потому что это не смогло бы присоединиться, пока Вы не вошли в систему и повредитесь, как только Вы вышли из системы; веб-сервис действительно должен работать независимо от того, кто, оказывается, зарегистрирован в то время. Во-вторых, потому что это означало бы, что Ваши сценарии PHP совместно используют область монтажа с Вашим сеансом пользователя - Вы пошли бы, чтобы скопировать что-то от одной программы до другого и найти, что Вы вставляли в чем-то из веб-сценария, не, что Вы скопировали. И то же самое могло произойти со сценарием - это pbcopies, что-то, затем pbpastes поддерживает что-то совершенно другое, потому что Вы, оказалось, использовали копию с GUI. И если бы несколько копий сценария работали, то они могли бы ступить друг на друга... это была бы полная путаница. Я не уверен, что Вы пытаетесь выполнить с pbcopy и pbpaste, но я вполне уверен, это - неправильный способ сделать это.

2
ответ дан 24.11.2019, 06:42

Теги

Похожие вопросы