В духе предыдущих двух книжных рекомендаций я также рекомендовал бы
Интерфейс программирования LINUX M. Kerrisk
который, хотя предназначаясь для темы системного программирования UNIX/Linux, показывает тонны подробной информации о том, как Linux и в более общем плане системы UNIX работают с точки зрения программиста/пользователя. Это копается в мельчайших подробностях в большинстве маркеров, упомянутых в ответе vdboor, и показывает достаточно детали понятным и читаемым способом для получения ощущения / изображение фундаментальных понятий UNIX и их основ.
Самый простой путь состоит в том, чтобы использовать su (1) команда, это имеет опцию, которая позволяет Вам выполнять команду через оболочку пользователя, пример:
su foo -c ls
Это переключится на пользовательское нечто и выполнит команду ls. Если у пользователя, которого Вы хотите использовать, нет допустимой оболочки (т.е. это не находится в/etc/shells, как/bin/false или/sbin/nologin), необходимо будет также указать оболочку на командной строке. Пример с выводом:
# su nobody -s /bin/bash -c id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Если start-stop-daemon
доступно в Вашей системе, необходимо, вероятно, использовать ее и взглянуть на ее опции (особенно -u
и -g
в этом случае).
(Иначе Вы могли бы использовать комбинацию su
и sg
.)
Обновление: Вот пример, взятый от некоторых /etc/init.d/mpd
сценарий (который использует start-stop-daemon
):
Команда Start:
echo "Starting Music Player Daemon"
start-stop-daemon --start --quiet --background --exec /usr/bin/mpd \
--pidfile /var/run/mpd.pid --make-pidfile \
-- --no-daemon /etc/mpd.conf 2>/dev/null
Все, что следует --
аргумент /usr/bin/mpd
сама программа. (daemonization процедура заботится о start-stop-daemon сценарием так mpd
попросился не заботиться об этом с --nodaemon
.)
Команда Stop:
echo "Stopping Music Player Daemon"
start-stop-daemon --stop --exec /usr/bin/mpd --pidfile /var/run/mpd.pid
Если 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
–
06.10.2011, 04:39
Usage: su [options] [LOGIN]
иsu: unrecognized option '--debug'
– 06.10.2011, 01:37su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
если яsu www-data
установите весь Вар и работайте${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
это хорошо работает. Как, таким образом, я решаю это? – 06.10.2011, 01:58su
берет отдельный аргумент, который является командой оболочки. Необходимо записатьsu www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
, и удостоверьтесь этоMONOSERVER
иWEBAPPS
экспортируются родительской оболочкой. (Отметьте: не делатьsu … -c "$MONOSERVER …"
поскольку это перестанет работать, если какая-либо из переменных будет содержать специальные символы оболочки.) И если у Вас есть выделенное средство запуска демона такой какstart-stop-daemon
, используйте его. – Gilles 'SO- stop being evil' 06.10.2011, 02:36