從新貴作業建立的文件中沒有寫入任何內容

從新貴作業建立的文件中沒有寫入任何內容

我有一個程序/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;
}

當我在非特權用戶模式下從目錄運行程式時,文件欄.txt是用創建的/家/我寫在裡面,效果很好。

..到目前為止我的新貴配置文件在/etc/初始化看起來像下面這樣:

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

當我重新啟動 tty2 時,該文件/home/me/bin/bar.txt創作得很好,但裡面什麼也沒寫。

我嘗試過寫一些其他的東西取得環境(「家」),就像一個基本字串,但仍然什麼都沒有。

為什麼會這樣呢?我該怎麼辦 ?

更新1: 幾個小時後,我才注意到我指向文件的指標沒有正確處理。當我寫入時,文件中仍然沒有任何內容取得環境(「家」)。為什麼 ?該進程以 root 身份執行,並且 getenv("HOME") 旨在至少寫入 '/根'

答案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/套接字伺服器:

#!/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

相關內容