Estou editando um script init.d. O script init.d executa um script utilitário que, em seguida, executa um processo. Em qualquer um dos scripts do bash, como eu faria para iniciar o processo principal como um usuário e grupo específico?
process
init
privileges
Stéphane Gimenez
fonte
fonte
Usage: su [options] [LOGIN]
esu: unrecognized option '--debug'
su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
sesu www-data
definir todos os vars e executá-${MONOSERVER} /applications=${WEBAPPS} /socket=unix:/path/monoserve.pid &
lo. Como assim eu resolvo isso?su
usa um único argumento, que é um comando shell. Você precisa escreversu www-data -c '$MONOSERVER "/application=$WEBAPPS" "/socket=unix:/path/monoserve.pid"'
e se certificar de queMONOSERVER
eWEBAPPS
são exportados pelo shell pai. (Nota: não façasu … -c "$MONOSERVER …"
como isso falhará se alguma das variáveis contiver caracteres especiais do shell.) E se você tiver um iniciador de daemon dedicado , comostart-stop-daemon
, use-o.Se
start-stop-daemon
está disponível em seu sistema, você provavelmente deve usá-lo e ter um olhar para as suas opções (especialmente-u
e-g
, neste caso).(Caso contrário, você pode usar uma combinação de
su
esg
.)Atualização: Aqui está um exemplo de algum
/etc/init.d/mpd
script (que usastart-stop-daemon
):Comando Iniciar:
Tudo o que se segue
--
é um argumento para o/usr/bin/mpd
próprio programa. (O procedimento de daemonization é tratado pelo script start-stop-daemon, portanto,mpd
é solicitado que você não se importe com isso--nodaemon
.)Comando de parada:
Se
mpd
não estava caindo privilégios por si só, seria preciso adicionar (por exemplo)-u mpd
,-g mpd
opções para ostart-stop-daemon
comando.fonte
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