web-dev-qa-db-ja.com

「サービス」コマンドと環境変数

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が私の変数を削除しているようです。変数が削除されないようにするには、変数をどのように設定すればよいですか。それとも私は何かすべきしないでください。

I could init-scriptsを使用して手動でサービスを開始するか、スクリプトへのパスをハードコーディングすることもできますが、serviceコマンドでそれを使用する方法を知りたいです。

8
Esa Varemo

Fedora 16以降、serviceLANGおよびTERM環境変数のみを受け入れ、それ以外はすべて破棄されます。したがって、現在の{CentOS、RHEL}が何らかの方法で変数を受け入れたとしても、それが機能しなくなる将来に備えてください。

したがって、initスクリプトをハードコーディングするか、デーモン設定ファイル自体に変数を設定するかを選択できます。

4

構成設定を/etc/sysconfig/<servicename>の構成に配置して、initスクリプトで読み取ることをお勧めします。

よろしく

ブラム

6
Bram

man 5 initから:

ジョブ環境
各ジョブは、それを開始したイベントまたはコマンドからの環境で実行されます。さらに、
ジョブでデフォルトを定義し、後でオーバーライドして、ジョブ用に生成されたイベントにエクスポートする環境変数を指定することができます。
 
特別なUPSTART_EVENTS環境変数ジョブを開始したイベントのリストが含まれていますが、
ジョブが手動で開始された場合は表示されません。
 
さらに、事前停止および事後停止スクリプトはジョブを停止したイベントまたはコマンドの環境で実行します。
 UPSTART_STOP_EVENTS環境変数には、ジョブを停止したイベントのリストが含まれます。ジョブ
が手動で停止された場合は表示されません。 
 
すべてのジョブには、ジョブの名前とインスタンスを含むUPSTART_JOBおよびUPSTART_INSTANCE環境変数も含まれています。
これらは主にinitctl(8)ユーティリティによってデフォルトで動作するように使用されますジョブではコマンドが呼び出されます。
 
 env KEY [= VALUE] 
デフォルトの環境変数を定義します。その値は、ジョブを開始するイベントまたはコマンドによってオーバーライドされる場合があります。
「KEY = VALUE」が指定されている場合、変数KEYには値VALUEが与えられます。 'KEY'のみが指定されている場合、値はinit(8)デーモン自身の環境から取得されます。
 
 export KEY 
の値をエクスポートしますこの
ジョブの開始(7)、開始(7)、停止(7)、停止(7)の各イベントと、結果のすべてのイベント(現在のジョブに関連するイベントだけではない)への環境変数。 ____。]

さらに、grep env /etc/init/*を実行して、使用方法を確認できます

これは私の出力です:

/etc/init/container-detect.conf:env container 
/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/wai t-for-state.conf:env WAIT_STATE = "started" 
/etc/init/wait-for-state.conf:env TARGET_GOAL = "start" 

網羅的な例については、そのスクリプトのいくつかを参照してください。ここにnginx.conf:

#nginx 
 
 description "nginx http daemon" 
 author "Philipp Klose" 
 
 start on(filesystem and net- device-up IFACE = lo)
 stop on runlevel [!2345] 
 
 env DAEMON =/usr/local/nginx/sbin/nginx 
 env PID = /usr/local/nginx/logs/nginx.pid

expect fork 
 respawn 
 respawn limit 10 5 
#oom never 
 
開始前スクリプト
 $ DAEMON -t 
 if [$? -ne 0] 
その後、$?
 fi 
 end script 
 
 exec $ DAEMON 
を終了します
2
jperelli