시작 작업에서 생성된 파일에는 아무 것도 기록되지 않습니다.

시작 작업에서 생성된 파일에는 아무 것도 기록되지 않습니다.

나는 프로그램을 가지고있다./집/나/빈/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/init다음과 같습니다:

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

tty2를 다시 시작하면 파일이/home/me/bin/bar.txt잘 만들어졌지만 안에는 아무것도 쓰여있지 않습니다.

다른거 쓰려고 했는데getenv("홈"), 기본 문자열과 비슷하지만 여전히 아무것도 아닙니다.

왜 그런 일이 일어나는 걸까요? 어떻게 해야 합니까?

업데이트.1: 몇 시간 후에 나는 파일에 대한 포인터가 제대로 처리되지 않았다는 것을 깨달았습니다. 어쨌든 약간의 오해를 제외하고는 변경 사항으로 문제가 해결되지 않았습니다. 글을 쓸 때 아직 파일에 아무것도 없습니다getenv("홈"). 왜 ? 프로세스는 루트로 실행되고 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

관련 정보