システムデバイスの環境変数を表示するには?

システムデバイスの環境変数を表示するには?

envsystemdサービスデバイスからダンプしようとしています。systemctl show-environmentやりたいことはしません。systemctlサービス内の環境がどのようなものかを示す方法はありますか?

答え1

サービスが実行されている場合を使用systemctl status <name>.serviceしてサービスプロセスのPIDを識別した後、を使用してsudo strings /proc/<PID>/environプロセスの実際の環境を確認できます。

答え2

「set」を実行するスクリプトを実行し、出力をファイルに書き込みます。

#!/usr/bin/ksh

set >> /tmp/set-results.txt

答え3

@telcoMの回答を詳しく説明するために、次の1行のコードを使用して、現在実行されている単一のPIDサービスから環境変数をダンプできます(一部の調整ですべてのPIDを繰り返して結果をリンクできます)。

strings /proc/$(systemctl status <unitname>.service | grep -Po '(?<=PID: )\d+')/environ

問題のサービスを開始またはアクセスできない場合は、systemctlコマンドを使用してサービスを構成するために使用されるディスク上のすべてのファイルの組み合わせを表示できます。マニュアルページから:

cat PATTERN...
           Show backing files of one or more units. Prints the "fragment" and
           "drop-ins" (source files) of units. Each file is preceded by a comment
           which includes the file name. Note that this shows the contents of the
           backing files on disk, which may not match the system manager's
           understanding of these units if any unit files were updated on disk and
           the daemon-reload command wasn't issued since.

したがって、systemctl cat <unitname>.service計算された構成「ファイル」を示す出力を生成する必要があります。ディスク上の更新されたファイルに関する上記の警告に加えて、指示がある場合は、画像全体を取得するためにEnvironmentFileそのファイルを見つける必要があります。このようなコンテンツを使用すると非常に近づくことがありますが、入力するのは難しいかもしれません。

echo $(systemctl show-environment) $(systemctl cat <unitname>.service | grep -Po '(?<=^Environment=)[^\n]*') $(cat "$(systemctl cat <unitname>.service | grep -Po '(?<=^EnvironmentFile=-)[^\n]*')")

私たちがすることは次のとおりです。

  • systemctl show-environment- systemctlの現在の環境を取得します。
  • systemctl cat <unitname>.service | grep -Po '(?<=^Environment=)[^\n]*'- 関連部門から環境ガイドラインを取得します。
  • cat "$(systemctl cat <unitname>.service | grep -Po '(?<=^EnvironmentFile=-)[^\n]*')"- リストされたファイルの内容を取得します。ダッシュが前に付いていない場合は、grep パターンを少し調整する必要があります。
  • echo ...- 上記のすべての出力を単一の文字列に混在させます。これを行うより良い方法が必要です。

関連情報