nada é escrito em um arquivo criado a partir de um trabalho inicial

1

Eu tenho um programa em / home / me / bin / foo , normalmente compilado de:

// includes
...
#define PATHNAME "/home/me/bin/bar.txt"

int main ()
{
   FILE* f;
   f = fopen(PATHNAME, "wb"); // I skip the possible error for freshness

   fputs(getenv("HOME"), f);

   fclose(f);

   return 0;
}

Quando executo o programa do diretório no modo de usuário sem privilégios, o arquivo bar.txt é criado com / home / me escrito dentro, que funciona bem ..

.. até agora Meu arquivo de configuração inicial em / etc / init é semelhante ao seguinte:

start on started tty2
exec /home/me/bin/foo

quando eu reinicio o tty2, o arquivo /home/me/bin/bar.txt é bem criado, mas nada está escrito dentro dele.

Eu tentei escrever algo diferente de getenv ("HOME") , como uma string básica, mas ainda nada.

Por que isso está acontecendo? o que devo fazer?

update.1: Depois de algumas horas eu notei que meu ponteiro para o arquivo não foi tratado corretamente .. De qualquer forma, exceto aquele pequeno mal-entendido, essas mudanças não resolveram o meu problema. Ainda não tenho nada no arquivo quando escrevo getenv ("HOME") . Por quê ? o processo é executado como a raiz e getenv ("HOME") se destina a escrever pelo menos ' / root '

    
por vdegenne 22.03.2013 / 16:57

1 resposta

0

Comandos executados pelo Upstart não possuem uma variável de ambiente HOME.

Eu usei upstart-socket-bridge em um projeto não relacionado para imprimir as variáveis de ambiente (u-s-b adiciona algumas variáveis especiais)

/etc/init/socket-test.conf:

description "upstart-socket-bridge test"
start on socket PROTO=inet PORT=34567 ADDR=127.0.0.1
setuid my_username
exec /bin/sh /tmp/socket-server

/ tmp / socket-server:

#!/bin/sh
outfile=/tmp/outfile
date > $outfile            # Timestamp
printenv >> $outfile
exit 0

Acionar o trabalho:

$ nc localhost 34567

E a lista de saída das variáveis de ambiente é semelhante:

$ cat /tmp/outfile
Wed Dec 11 07:23:50 CST 2013
UPSTART_INSTANCE=
PORT=34567
PROTO=inet
UPSTART_JOB=socket-test
UPSTART_FDS=12
TERM=linux
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
UPSTART_EVENTS=socket
PWD=/
ADDR=127.0.0.1
    
por user535733 12.12.2013 / 18:10