“服务”命令和环境variables

我试图启动一个需要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只接受LANGTERM环境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