upstart 作业创建的文件中没有任何内容

upstart 作业创建的文件中没有任何内容

我有一个程序/主页/我/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创建于/家/我写在里面,效果很好。

.. 到现在为止我的 upstart 配置文件在/etc/init如下所示:

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

当我重新启动 tty2 时,文件/home/me/bin/bar.txt制作精良,但里面什么都没有写。

我尝试写一些其他的东西获取环境(“HOME”),就像一个基本的字符串但仍然什么都没有。

为什么会发生这种情况?我该怎么办?

更新.1: 几个小时后,我才注意到指向文件的指针没有得到正确处理。无论如何,除了那个小误会,这些改变并没有解决我的问题。当我写入时,文件中仍然没有任何内容获取环境(“HOME”)。为什么?该进程以 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

相关内容