Como dizer ao start-stop-daemon para atualizar $ HOME e $ USER de acordo com o parâmetro --chuid

6

Estou tentando executar um serviço que usa variáveis de ambiente $ HOME e $ USER . Eu poderia colocá-los em serviço, mas isso seria apenas uma solução temporária.

Digamos que eu tenha um script test.sh com o seguinte conteúdo:

echo $USER

E eu corro com start-stop-daemon para ver meus resultados:

$ start-stop-daemon --start --exec 'pwd'/test.sh --user guest --group guest --chuid -guest
root

Parece que não atualiza o ambiente, talvez isso deva ser relatado como um bug?

Eu encontrei uma solução hacky desagradável, que só funciona (por motivo desconhecido) no meu caso de uso simples:

$ start-stop-daemon --exec /usr/bin/sudo --start -- -u guest -i 'echo $USER'
guest

Tenho certeza de que alguém mais se deparou com isso, estou interessado em uma solução limpa.

$ start-stop-daemon --version
start-stop-daemon 1.13.11+gentoo
    
por iElectric 09.05.2010 / 10:15

2 respostas

6

Este pode ser o comportamento pretendido. A página de manual mostra uma opção --env para start-stop-daemon :

   -e|--env env-name
          Set an environment variable whose name  and  value  is  env-name
          before   starting  executable.   Example:  -e  HOME="/home/user"
          exports an environment variable whose name is  HOME  with  value
          "/home/user".   Note,  only  one  --env  option is suppoted, use
          /usr/bin/env if you need more.

O autor usou $HOME no exemplo, o que considero significar que normalmente não seria definido. Não vejo outras opções para atualizar o ambiente do processo que você está iniciando.

Tente executar start-stop-daemon da seguinte forma:

USER=guest HOME=~guest start-stop-daemon --start --exec /path/to/prog ...

Outra alternativa seria executar o script em sudo :

start-stop-daemon --start --exec /usr/bin/sudo -- -H -u guest /path/to/prog

sudo definirá automaticamente $USER e a opção -H também definirá $HOME . Eu corri os dois com o meu próprio test.sh que imprime o valor dessas variáveis, e ambos os atualizaram conforme desejado. Eu sou parcial para o primeiro porque ele não adiciona outro programa para o mix, mas isso é só comigo.

    
por 09.05.2010 / 17:14
0

É possível que o shell seja diferente para o script do que para o ambiente no qual start-stop-daemon está sendo executado. Tente especificar o shell em seu script usando uma linha shebang:

#!/bin/bash

No meu sistema, sh é o Dash, que não define $USER , mas o herdará do ambiente de um pai.

    
por 09.05.2010 / 10:27