env
systemdサービスデバイスからダンプしようとしています。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 ...
- 上記のすべての出力を単一の文字列に混在させます。これを行うより良い方法が必要です。