質問

質問

質問

私のC ++アプリケーションはシステムサービスとして実行されます。環境変数を使用して構成し、アプリケーションを再起動しなくても、実行時に変数値を再ロードできる必要があります。

.confファイルと使用環境その中の値を変更した後、daemon-reloadを実行します。.conf文書。しかし、サービスは変更を認識しませんでした。

私は知っていますsystemctlの再ロードコマンドを実行しましたが、何を設定するのかわかりません。リフレッシュの実行指示する。

C++アプリケーションコード

#include <unistd.h>
#include <fstream>

using namespace std;

int main(int argc, char** argv)
{
    while (true)
    {
        char * cp = getenv("BAR");
        string s = "";
        if (cp)
            s = (string) cp;
        fstream fs;
        fs.open("/tmp/foo", ios_base::app);
        fs << s << endl;
        fs.close();
        sleep(1);
    }
    return 0;
}

サービスの説明

パス:/etc/systemd/system/foo.service

[Unit]
Description=Testing configuration reloading

[Service]
ExecStart=/home/user/foo_application
Type=simple

[Install]
WantedBy=default.target

サービス構成ファイル

パス:/etc/systemd/system/foo.service.d/foo.conf

[Service]
Environment="BAR=2"

私の以前の(再)検索

https://serverfault.com/a/590732/379539

https://coreos.com/os/docs/latest/using-environment-variables-in-systemd-units.html

https://www.freedesktop.org/software/systemd/man/systemctl.html

ベストアンサー1

プロセスが作成されると、環境はプロセスのアドレス空間にコピーされます。環境の変更は新しく開始されたプロセスにのみ影響し、実行中のプログラムの環境は外部から変更できません。

目標を達成するには、プロセス間通信(IPC)メカニズムの種類を必要とするか、ファイルに新しい値を書き、プログラムにファイルの内容をポーリングする必要があります。

おすすめ記事