Я редактирую скрипт init.d. Сценарий init.d запускает служебный скрипт, который затем запускает процесс. Из любого сценария bash, как я могу заставить его запускать основной процесс как определенный пользователь и группа?
process
init
privileges
Стефан Хименес
источник
источник
Usage: su [options] [LOGIN]
иsu: unrecognized option '--debug'
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
если яsu www-data
установил все переменные и запустил${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
их. Как мне это решить?su
принимает один аргумент - команду оболочки. Вам нужно написатьsu www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
и убедиться, чтоMONOSERVER
иWEBAPPS
экспортируются родительской оболочкой. (Примечание: не делайте, такsu … -c "$MONOSERVER …"
как это не удастся, если какая-либо из переменных содержит специальные символы оболочки.) И если у вас есть выделенная программа запуска демона, напримерstart-stop-daemon
, используйте ее.Если
start-stop-daemon
имеется в вашей системе , вы должны , вероятно , использовать его и посмотреть на его варианты (особенно-u
и-g
в данном случае).(В противном случае вы можете использовать комбинацию
su
иsg
.)Обновление: вот пример, взятый из некоторого
/etc/init.d/mpd
скрипта (который используетstart-stop-daemon
):Начать команду:
Все, что следует,
--
является аргументом самой/usr/bin/mpd
программы. (Процедура демонизации выполняется скриптом start-stop-daemon, поэтомуmpd
просим не заботиться об этом--nodaemon
.)Стоп команда:
Если
mpd
не падали привилегии самого по себе, можно было бы необходимо добавить (к примеру)-u mpd
,-g mpd
опцию кstart-stop-daemon
команде.источник
start-stop-daemon --start --quiet --background -u www-data -g www-data --exec ${MONOSERVER} --pidfile /path/monoserve.pid --make-pidfile -- /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid