Estoy editando un script init.d. El script init.d ejecuta un script de utilidad que luego ejecuta un proceso. De cualquiera de los scripts de bash, ¿cómo haría que inicie el proceso principal como un usuario y grupo específicos?
process
init
privileges
Stéphane Gimenez
fuente
fuente
Usage: su [options] [LOGIN]
ysu: unrecognized option '--debug'
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
sisu www-data
configuro todos los vars y lo ejecuto${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
funciona bien. ¿Cómo puedo resolver esto?su
toma un único argumento, que es un comando de shell. Usted tiene que escribirsu www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
, y asegúrese de queMONOSERVER
yWEBAPPS
se exportan por el shell padre. (Nota: no haga,su … -c "$MONOSERVER …"
ya que esto fallará si alguna de las variables contiene caracteres especiales de shell). Y si tiene un iniciador de demonios dedicado comostart-stop-daemon
, úselo.Si
start-stop-daemon
está disponible en su sistema, probablemente debería usarlo y echar un vistazo a sus opciones (especialmente-u
y-g
en este caso).(De lo contrario, puede usar una combinación de
su
ysg
.)Actualización: Aquí hay un ejemplo tomado de algún
/etc/init.d/mpd
script (que usastart-stop-daemon
):Comando de inicio:
Todo lo que sigue
--
es un argumento para el/usr/bin/mpd
programa en sí. (El guión start-stop-daemon se encarga del procedimiento de daemonización, por lo quempd
se le pide que no se preocupe por ello--nodaemon
).Comando de parada:
Si
mpd
no estaba eliminando los privilegios por sí mismo, uno necesitaría agregar (por ejemplo)-u mpd
,-g mpd
opciones alstart-stop-daemon
comando.fuente
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