ничего не написано в файле, созданном из выскочки

У меня есть программа в / home / me / bin / foo , обычно скомпилированная из:

// 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;
}

Когда я запускаю программу из каталога в пользовательском режиме без привилегий , файл bar.txt создается с / home / me , написанным внутри, который работает нормально ..

.. до сих пор мой файл конфигурации upstart в / etc / init выглядел следующим образом:

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

, когда я перезапускаю tty2, файл / home / me /bin/bar.txt хорошо создан, но внутри ничего не написано.

Я пытался написать что-то еще, кроме getenv («HOME») , как базовую строку, но все еще ничего.

Почему это происходит? что мне делать?

update.1: Через несколько часов я просто заметил, что мой указатель на файл не был обработан должным образом. В любом случае, за исключением этого небольшого недоразумения, эти изменения не решить мою проблему. У меня все еще ничего нет в файле, когда я пишу getenv ("HOME") . Зачем ? процесс выполняется как root, а getenv ("HOME") предназначен для записи по крайней мере ' / root '

1
задан 24 March 2013 в 02:14

1 ответ

Команды, выполняемые Upstart, не имеют переменной среды HOME.

Я использовал upstart-socket-bridge для несвязанного проекта для печати переменных среды (usb добавляет несколько специальных переменных)

/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

Запустить задание:

$ nc localhost 34567

И выходной список переменных среды выглядит следующим образом:

$ 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
0
ответ дан 24 March 2013 в 02:14

Другие вопросы по тегам:

Похожие вопросы: