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
명령.
답변
Fedora 16부터는 환경 변수 service
만 허용 LANG
하고 TERM
다른 모든 변수는 버립니다. 따라서 현재 {CentOS, RHEL}이 어떻게 든 변수를 허용하더라도 더 이상 작동하지 않는 미래에 대비하십시오.
따라서 init 스크립트를 하드 코딩하거나 데몬 설정 파일 자체에서 변수를 설정하는 것이 좋습니다.
답변
구성 설정을 구성에 배치 /etc/sysconfig/<servicename>
한 다음 init 스크립트가이를 읽는 것이 좋습니다 .
문안 인사
브람
답변
보낸 사람 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