Estou tendo alguns problemas para entender todos os mecanismos por trás do gerenciamento de usuários com upstart, node e bash.
O que eu quero fazer:
Eu quero ter um serviço que execute um script de nó. Esse script de nó abre uma porta e o servidor e, quando recebe uma solicitação, executa um arquivo bash por meio de um processo filho.
Eu tenho um usuário chamado myuser
com direitos sudo.
Então aqui está minha descrição de serviço:
description "Some Service"
author "My User"
start on filesystem runlevel [2345]
stop on shutdown
respawn
setuid myuser
exec /usr/bin/node /home/myuser/deploy/index.js
Então, aqui está o meu arquivo de nó:
app.post('/deploy', function (req, res) {
...
var child = execFile('/home/myuser/deploy/deploy.sh', execOptions, function(error, stdout, stderr) {
...
});
res.send('ok');
});
E a seguir, aqui está uma parte do meu arquivo bash:
LOG_FILE="/home/myuser/bash_deployer.log"
echo "User that deploys: $USER" >> $LOG_FILE;
echo "UID that deploys: $UID" >> $LOG_FILE;
Então, aqui está o resultado do arquivo bash_deployer.log
:
User that deploys:
UID that deploys: 1001
Portanto, não consigo entender por que minha variável $USER
fica vazia enquanto o $UID
é bom.
Eu quero ter certeza de que todos os comandos que estão no meu script bash são executados pelo usuário myuser
. Como eu pude fazer isso?
Informações adicionais:
Quando executo meu script de nó a partir da linha de comando registrada como myuser
: node index.js
e faço uma solicitação, as informações são boas:
User that deploys: myuser
UID that deploys: 1001
Portanto, o problema deve ser entre upstart e node, ou como eu poderia ter certeza de que o serviço upstart executaria meu script de nó como myuser