我试图启动一个需要env的服务。 variables被设置为某个path。 我在“/etc/profile.d/”中设置了这个variables。 但是,当我使用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正在消除我的变数。 我应该如何设置variables,以防止它们被删除。 或者是我不应该做的事情。
我可以使用init脚本手动启动服务,甚至可以将path硬编码到脚本中,但是我想知道如何将它与service命令一起使用。
从Fedora 16开始, service只接受LANG和TERM环境variables,其他的都被丢弃。 因此,即使您目前的{CentOS,RHEL}以某种方式接受这些variables,为未来做好了准备,以避免它再次发挥作用。
因此,对初始化脚本进行硬编码和/或在守护进程设置文件中设置variables将是您的select。
build议将configuration设置放置在/etc/sysconfig/<servicename> ,然后由init脚本读取。
问候
布拉姆
从man 5 init :
工作环境
每个作业都是从启动它的事件或命令的环境中运行的。 另外,你可以在中定义默认值
作业,稍后可能会被覆盖,并指定将哪些环境variables导出到作业生成的事件中。
特殊的UPSTART_EVENTS环境variables包含启动作业的事件列表,如果不是,则不会出现
工作是手动启动的。
另外,停止前和停止后的脚本与停止作业的事件或命令的环境一起运行。
UPSTART_STOP_EVENTS环境variables包含停止作业的事件列表,如果作业不存在
被手动停止。
所有作业还包含UPSTART_JOB和UPSTART_INSTANCE环境variables,其中包含作业和实例的名称。
这些主要由initctl(8)实用程序使用,以默认执行命令从其调用的作业。
env KEY [= VALUE]
定义一个默认的环境variables,其值可以由启动作业的事件或命令覆盖。
如果指定了'KEY = VALUE',则variablesKEY被赋予值VALUE。 如果只给出“关键”,那么价值就会被采纳
从init(8)守护进程的自己的环境中。
导出密钥
将环境variables的值导出到开始(7),开始(7),停止(7)和停止(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] && container = 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 描述“nginx http守护进程” 作家“菲利普·克洛斯” 从文件系统和networking设备上启动(IFACE = lo) 在运行级别停止[!2345] env DAEMON = / usr / local / nginx / sbin / nginx env PID = / usr / local / nginx / logs / nginx.pid 期望叉子 重生 重生限制10 5 #从来没有 预启动脚本 $ DAEMON -t 如果[$? -ne 0] 然后退出$? 科幻 结束脚本 exec $ DAEMON