Самый легкий путь, вероятно, с sudo
. Давайте предположим желание всех в cdrom
группа, которая в состоянии смонтироваться и размонтировать ISO-образы. Сделайте следующее дополнение к sudoers использованию файла visudo
:
cdrom ALL = /bin/mount -o loop -t iso9660 *.iso /media/*
cdrom ALL = /bin/umount /media/*
Это должно позволить кому-либо войти cdrom
группа для монтирования файла, заканчивающегося в .iso
как тип iso9660
на каталоге в / папке медиа и также размонтировали что-либо в / папке медиа.
Вы можете фон это в одном выстреле как это:
sudo -u user sh -c "daemon & disown %1"
Взгляд с ps
покажет это daemon
работает как user
. Будет нет sudo
связанный с ним.
sudo
не остается бежать за ним, выполняет программу, к которой Вы спрашиваете это; на самом деле это использует exec()
системный вызов для замены себя программой, которую Вы указываете так, чтобы программа имела тот же PID это sudo
сделал. Можно проверить это путем выполнения следующих команд:
sudo -u user -b sleep 60
ps aux | grep sudo
ps aux | grep sleep
Вы будете видеть, что сон все еще работает, но sudo не.
Если Вы спрашиваете оболочку к фону sudo с &
оператор, затем sudo будет блокироваться и ожидать там в фоновом режиме неограниченно долго, если он должен предложить Вам Ваш пароль. Если это не предлагает Вам Ваш пароль, то программа, которую Вы указываете, запущена и sudo
больше не работает. Из-за потенциала для блокирования-b переключаются на sudo
предпочтительный метод, таким образом, он может предложить Вам Ваш пароль в случае необходимости, и затем он разветвится в фон для запущения требуемой программы.
Если Вы имеете daemonize
программа, можно использовать sudo daemonize PATH_TO_DAEMON
.
Извините, это не действительно ответ, больше дополнительного комментария.
Несмотря на ответ psusi, кажется что некоторые версии sudo
будет всегда fork()
(и ожидайте дочернего процесса если -b
не указан).
Проблема с использованием -b
это затем $!
не содержит PID демона; проблема с использованием daemonize
это, это не поставляется со всеми дистрибутивами; проблема с использованием sudo sh -c 'run_my_daemon arg1 arg2 arg3... & save_pid $!'
та передача args в к run_my_daemon
вполне искажен; уход от таких искривлений является основной причиной использовать sudo во-первых.
Волнение по поводу ожидания пароля только применяется, если Вы не корень для начала; в особенности рассмотрите случай использования sudo -u $run_as_uid prog "${args[@]}"
в сценарии, который уже работает как корень.