start-stop-daemon --start \ --quiet \ # --name $NAME \ --make-pidfile \ --pidfile $PIDFILE \ --exec $JAVA \ --test > /dev/null \
Comentários em scripts de shell não funcionam assim. Você fez dois comandos,
start-stop-daemon --start --quiete
--make-pidfile --pidfile $PIDFILE --exec $JAVA --test > /dev/null
Não tente comentar argumentos de comando dessa maneira.
Para os espectadores que estão desesperados com o uso do System 5 rc
scripts e arquivos PID, note que a primeira regra para migrar para o systemd de fato se aplica à ponte de automação residencial Philips Hue. Neste caso particular, pode-se encontrar uma unidade de serviço já escrita por BWS Systems para começar .
No mundo daemontools, o programa run
para tal serviço é obviamente simples, especialmente no seu caso em que o Java é direto em /usr/bin/java
. Aqui está uma dessas:
#!/bin/nosh setuidgid pi userenv chdir /home/pi/habridge java -jar -Dconfig.file=data/habridge.config ./ha-bridge-3.2.2.jar
Naturalmente, executar o não-superusuário do programa Java (como faz este programa run
) significa que ele não pode ligar um soquete à porta 80 como desejar. É por isso que você está tentando comentar a opção --chuid
no seu script System 5 rc
, sem dúvida.
Em um mundo ideal, o programa Java não estaria fazendo isso, mas seria usar algo como tcp-socket-listen
para vincular um soquete de escuta antes de executar setuidgid
para descartar privilégios e executar o programa Java, que simplesmente aceitaria o soquete de escuta como o descritor de arquivo aberto # 3 sem ter que se preocupar com nada disso em si.
A idéia de que o sistema de gerenciamento de serviços pode fazer isso por um serviço é comum ao daemontools world, systemd, launchd e até inetd
. Um programa daemontools run
(novamente usando o kit de ferramentas de nosh , embora tem-se uma escolha de toolkits para gerenciamento de daemon e para UCSPI ) seria parecido com:
#!/bin/nosh tcp-socket-listen --numeric-host --backlog 2 --bind-to-any 128.168.1.40 www-http setuidgid pi userenv chdir /home/pi/habridge java -jar -Dconfig.file=data/habridge.config ./ha-bridge-3.2.2.jar
Naturalmente, muitos desses programas Java aparentemente não alcançaram a ideia de serem passados seus soquetes de comunicação já abertos . Portanto, não é possível executar setuidgid
antes de invocar o Java aqui, e é preciso confiar ainda em outro servidor Java rodando com privilégios de superusuário.
A razão pela qual eu menciono isso é que com scripts run
do estilo daemontools interpretados por ferramentas como nosh
e execlineb
de Laurent Bercot, e com unidades de serviço do systemd, uma pode comentar as coisas da maneira que você quer.
Em uma unidade de serviço do systemd, é possível comentar a parte que descarta os privilégios de superusuário com os comentários do arquivo .INI:
;User=pi ;Group=piUma pessoa modificaria o primeiro programa
run
com a aplicação da seguinte forma: #!/bin/nosh #setuidgid pi #userenv chdir /home/pi/habridge java -jar -Dconfig.file=data/habridge.config ./ha-bridge-3.2.2.jar