“서비스”명령 및 환경 변수


8

env가 필요한 서비스를 시작하려고합니다. 특정 경로로 설정 될 변수. 이 변수를 "/etc/profile.d/"에 설정했습니다. 그러나 service명령을 사용하여이 서비스를 시작하면 작동하지 않습니다.

남자 서비스 :

service runs a System V init script in as predictable environment as possible,
removing most environment variables and with current working directory set to /.

그래서 service내 변수를 제거 하는 것 같습니다 . 변수가 제거되지 않도록 어떻게 설정해야합니까? 아니면 내가 해서는 안되는 일입니까?

내가 할 수 수동으로 초기화 - 스크립트를 사용하여 서비스를 시작하거나 심지어 스크립트에 경로를 하드,하지만 난 그것을 사용하는 방법을 알고 싶습니다 service명령.

답변:


4

Fedora 16부터는 환경 변수 service만 허용 LANG하고 TERM다른 모든 변수는 버립니다. 따라서 현재 {CentOS, RHEL}이 어떻게 든 변수를 허용하더라도 더 이상 작동하지 않는 미래에 대비하십시오.

따라서 init 스크립트를 하드 코딩하거나 데몬 설정 파일 자체에서 변수를 설정하는 것이 좋습니다.


단점은 앱을 업데이트 할 때마다 파일을 변경해야하지만, 난 단지 ... (... 자주 업데이트하지 않음)
Esa Varemo

글쎄, 요즘은 "업데이트가 자주"이다. 함께 살아라.
Janne Pikkarainen

6

구성 설정을 구성에 배치 /etc/sysconfig/<servicename>한 다음 init 스크립트가이를 읽는 것이 좋습니다 .

문안 인사

브람


/etc/sysconfig/<servicename>파일의 다른 팁으로 bash를 사용 하여 쉘 로그인 환경을 모방하기 위해 source파일을로드 할 수 있습니다 /etc/profile.d.
Adam Gent

2

보낸 사람 man 5 init:

   직업 환경
       각 작업은 시작된 이벤트 또는 명령에서 환경과 함께 실행됩니다. 또한
       나중에 대체 될 수있는 작업으로, 작업에 대해 생성 된 이벤트로 내보낼 환경 변수를 지정하십시오.

       특수 UPSTART_EVENTS 환경 변수에는 작업을 시작한 이벤트 목록이 포함되어 있습니다.
       작업이 수동으로 시작되었습니다.

       또한 사전 중지 및 사후 중지 스크립트는 작업을 중지 한 이벤트 또는 명령 환경에서 실행됩니다.
       UPSTART_STOP_EVENTS 환경 변수에는 작업을 중지 한 이벤트 목록이 포함되어 있습니다.
       수동으로 중지되었습니다.

       모든 작업에는 작업 및 인스턴스 이름을 포함하는 UPSTART_JOB 및 UPSTART_INSTANCE 환경 변수도 포함됩니다.
       이들은 주로 initctl (8) 유틸리티에서 명령이 호출 된 작업을 수행하도록 기본적으로 사용됩니다.

       env KEY [= VALUE]
              작업을 시작하는 이벤트 또는 명령으로 값을 대체 할 수있는 기본 환경 변수를 정의합니다.
              'KEY = VALUE'가 지정되면 변수 KEY에 값 VALUE가 제공됩니다. 'KEY'만 지정하면 값이 사용됩니다.
              init (8) 데몬 자신의 환경에서.

       수출 키
              환경 변수의 값을 이에 대한 starting (7), Started (7), stop (7) 및 stop (7) 이벤트로 내 보냅니다.
              작업 및 모든 결과 이벤트 (현재 작업과 관련된 이벤트 만이 아님).

또한 당신 grep env /etc/init/*은 어떻게 사용되는지 볼 수 있습니다

이것은 내 출력입니다.

/etc/init/container-detect.conf:env 컨테이너
/etc/init/container-detect.conf:env LIBVIRT_LXC_UUID
/etc/init/container-detect.conf : #은 init 환경에서 "컨테이너"를 확인하는 것입니다.
/etc/init/container-detect.conf : [-d / proc / vz] && [! -d / proc / bc] && 컨테이너 = openvz
/etc/init/mounted-debugfs.conf:env MOUNTPOINT = / sys / kernel / debug
/etc/init/mounted-dev.conf:env MOUNTPOINT = / dev
/etc/init/mounted-proc.conf:env MOUNTPOINT = / proc
/etc/init/mounted-tmp.conf:env MOUNTPOINT = / tmp
/etc/init/munin-node.conf:env DAEMON = / usr / sbin / munin-node
/etc/init/mysql.conf:env HOME = / etc / mysql
/etc/init/nginx.conf:env DAEMON = / usr / local / nginx / sbin / nginx
/etc/init/nginx.conf:env PID = / usr / local / nginx / logs / nginx.pid
/etc/init/procps.conf:env UPSTART_EVENTS =
/etc/init/rc.conf:env INIT_VERBOSE
/etc/init/rc-sysinit.conf:env DEFAULT_RUNLEVEL = 2
/etc/init/rc-sysinit.conf:env RUNLEVEL =
/etc/init/rc-sysinit.conf:env PREVLEVEL =
/etc/init/rc-sysinit.conf:env INIT_VERBOSE
/etc/init/wait-for-state.conf:env TIMEOUT = 30
/etc/init/wait-for-state.conf:env MANUAL_OVERRIDE = "N"
/etc/init/wait-for-state.conf:env WAIT_FOREVER = "N"
/etc/init/wait-for-state.conf:env WAIT_STATE = "시작됨"
/etc/init/wait-for-state.conf:env TARGET_GOAL = "시작"

그리고 철저한 예를 보려면 해당 스크립트 중 일부를 참조하십시오. 여기 nginx.conf :

# 니 진스

설명 "nginx http 데몬"
저자 "Philipp Klose"

시작 (파일 시스템 및 net-device-up IFACE = lo)
런레벨에서 멈춤 [! 2345]

env DAEMON = / usr / local / nginx / sbin / nginx
env PID = / usr / local / nginx / logs / nginx.pid

포크를 기대하다
리스폰
리스폰 제한 10 5
#oom never

사전 시작 스크립트
 $ DAEMON -t
 만약 [$? -ne 0]
 그런 다음 $를 종료 하시겠습니까?
 fi
엔드 스크립트

exec $ DAEMON
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.