Então, o problema acabou sendo uma configuração de caminho diferente.
Gunicorn estava usando o python virtualenv como PATH e, portanto, não conhecia whoami. Empurrando no caminho absoluto funcionou!
Eu tenho um webapp (nginx, gunicorn, python) que recebe git post hooks e aciona uma ferramenta de linha de comando (ruby, capistrano). Tudo é executado por meio de um usuário chamado deployer
. A ferramenta de linha de comando funciona muito bem e pode se conectar via ssh a servidores remotos.
Quando o webapp aciona, ele não pode se conectar via ssh. Uma senha é necessária. Eu acho que sei como contornar isso (eu tive um problema semelhante com o cronjobs aqui: O servidor é eliminado devido ao número crescente de processos do ssh-agent ), mas de alguma forma o usuário está vazio no webabb.
Dado este script:
#!/bin/bash
echo "$(whoami)"
Quando executo deployer@tools:/srv/deployment$ ./test > test.txt
, test.txt contém "implantador" e o arquivo test.txt
é de propriedade de deployer: deployer.
Quando eu executo o mesmo comando de dentro do meu webapp, o test.txt está vazio (contendo apenas uma quebra de linha), mas de propriedade do implementador: www-data (como esperado e configurado no gunicorn).
Como isso é possível e o que posso fazer sobre isso?
Então, o problema acabou sendo uma configuração de caminho diferente.
Gunicorn estava usando o python virtualenv como PATH e, portanto, não conhecia whoami. Empurrando no caminho absoluto funcionou!