Configurando o proprietário do arquivo criado pelo redirecionamento de saída start-stop-daemon

4

Eu tenho a seguinte linha em do_start () do meu script init personalizado que inicia um aplicativo java:

start-stop-daemon --background --start --quiet --oknodo --make-pidfile --pidfile $PIDFILE --chdir $SOLR_DIR --chuid $USER --exec $DAEMON -- \
$DAEMON_ARGS >>$LOG_DIR/$NAME.log 2>>$LOG_DIR/$NAME.err 

quando expandido, torna-se:

start-stop-daemon --background --start --quiet --oknodo --make-pidfile --pidfile /var/run/solr.pid 
--chdir /home/phuihock/src/proj/solr 
--chuid phuihock 
--exec /usr/bin/java 
-- -jar start.jar >>/home/phuihock/src/proj/logs/solr.log 2>>/home/phuihock/src/proj/logs/solr.err

Os arquivos de log criados são de propriedade do usuário root, group root. Eu espero que eles sejam de propriedade do usuário que eu configurei com --chuid, porque a partir do manpage, tudo depois - são passados sem modificações.

A minha pergunta é, todos os redirecionamentos são de start-stop-daemon pertencentes a root, e existe uma maneira de mudar isso?

    
por phuihock 17.04.2011 / 20:58

1 resposta

2

Redirecionamentos não fazem parte dos argumentos da linha de comando. Eles são tratados separadamente pelo shell, que no seu caso é executado como root. Mas mesmo se as permissões estivessem corretas, este comando não faria com que a saída do daemon fosse anexada ao arquivo de log.

Para ilustração, isso é o que realmente acontece:

  1. O shell executa o daemon start-stop e redireciona sua saída para solr.log. O arquivo estará vazio, porque este comando não produz nada (apenas tente executá-lo manualmente, sem redirecionamento).
  2. O comando start-stop-daemon processa seus argumentos e acaba chamando /usr/bin/java -jar start.jar . Observe que não há redirecionamento de saída, mas o processo é bifurcado em segundo plano, então a saída termina em / dev / null.

Em outras palavras, o daemon deve aceitar um argumento de arquivo de log ou você precisa criar um script de wrapper que manipulará o redirecionamento. Pode parecer da seguinte forma

#/bin/sh
cd /home/phuihock/src/proj/solr
exec /usr/bin/java -jar start.jar >> logs/solr.log
    
por Adam Byrtek 18.04.2011 / 01:56