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


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

私は可能性のinit-スクリプトを使用して手動でサービスを開始、あるいはスクリプトにパスをハードコーディングが、私はとそれを使用する方法を知りたいserviceコマンド。

回答:


4

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

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


欠点は、アプリを更新するたびにファイルを変更する必要があることですが、私はただ...(...頻繁に更新しないでください)
Esa Varemo

さて、「頻繁に更新する」は今日では当たり前です。それと一緒に暮らしてください。
ジャンヌピッカライネン

6

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

よろしく

ブラム


/etc/sysconfig/<servicename>ファイルの別のヒントとして、bashを使用してファイルsourceをロードし/etc/profile.d、シェルログイン環境を模倣することができます。
アダムゲント2013年

2

からman 5 init

   仕事環境
       各ジョブは、それを開始したイベントまたはコマンドからの環境で実行されます。さらに、デフォルトを
       後でオーバーライドされ、そのジョブに対して生成されたイベントにエクスポートされる環境変数を指定するジョブ。

       特別なUPSTART_EVENTS環境変数には、ジョブを開始したイベントのリストが含まれています。
       ジョブは手動で開始されました。

       さらに、事前停止および事後停止スクリプトは、ジョブを停止したイベントまたはコマンドの環境で実行されます。
       UPSTART_STOP_EVENTS環境変数には、ジョブを停止したイベントのリストが含まれています。ジョブが
       手動で停止されました。

       すべてのジョブには、ジョブとインスタンスの名前を含むUPSTART_JOBおよびUPSTART_INSTANCE環境変数も含まれています。
       これらは主にinitctl(8)ユーティリティによって使用され、コマンドの呼び出し元のジョブをデフォルトで実行します。

       環境キー[=値]
              デフォルトの環境変数を定義します。その値は、ジョブを開始するイベントまたはコマンドによってオーバーライドされる場合があります。
              KEY = VALUEが指定されている場合、変数KEYには値VALUEが与えられます。「KEY」のみが指定されている場合、値が取得されます
              init(8)デーモン自身の環境から。

       キーをエクスポート
              この環境変数の値を、starting(7)、started(7)、stopping(7)、stopped(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 = "started"
/etc/init/wait-for-state.conf:env TARGET_GOAL = "start"

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

#nginx

説明 "nginx httpデーモン"
著者「フィリップ・クローゼ」

開始(ファイルシステムおよび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.