tengo un programa en/home/yo/bin/foo, normalmente compilado a partir 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;
}
Cuando ejecuto el programa desde el directorio en modo de usuario sin privilegios, el archivobarra.txtse crea con/casaescrito en el interior, eso funciona bien...
.. hasta ahora mi archivo de configuración advenedizo en/etc/initse parece a lo siguiente:
start on started tty2
exec /home/me/bin/foo
cuando reinicio tty2, el archivo/home/yo/bin/bar.txtEstá bien creado pero no hay nada escrito en su interior.
He intentado escribir algo más quegetenv("INICIO"), como una cadena básica pero aún nada.
¿Por qué sucede eso? Qué tengo que hacer ?
actualización.1: Después de unas horas, me di cuenta de que mi puntero al archivo no se manejaba correctamente. De todos modos, excepto ese pequeño malentendido, los cambios no resolvieron mi problema. Todavía no tengo nada en el archivo cuando escribo.getenv("INICIO"). Por qué ? el proceso se ejecuta como root y getenv("HOME") está destinado a escribir al menos '/raíz'
Respuesta1
Los comandos ejecutados por Upstart no tienen una variable de entorno HOME.
Utilicé upstart-socket-bridge en un proyecto no relacionado para imprimir las variables de entorno (usb agrega algunas variables especiales)
/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-servidor:
#!/bin/sh
outfile=/tmp/outfile
date > $outfile # Timestamp
printenv >> $outfile
exit 0
Activar el trabajo:
$ nc localhost 34567
Y la lista de salida de variables de entorno se ve así:
$ 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