ホームページ > 運用・保守 > Linuxの運用と保守 > Linuxサービスがシステム環境変数を使用できない問題の解決方法

Linuxサービスがシステム環境変数を使用できない問題の解決方法

王林
リリース: 2023-05-16 19:28:26
転載
1188 人が閲覧しました

    Linux サービスはシステム環境変数を使用できません

    詳細な説明

    以前に mysql マルチインスタンス インストールを実行したとき、インストールは成功しました。 、linux 正常に起動することもできますが、support-files/mysqld_multi.server を /etc/init.d/ ディレクトリに移動し、スタートアップの設定 (chkconfig xxx on) が失敗します。

    問題調査

    問題を見つけて解決し始めました。service xxx start では mysql の複数のインスタンスを開始できないことがわかりましたが、mysqld_multi start は使用できることがわかりました。その後、さまざまな試みの後、mysql 環境変数が / によって設定されていることがわかりました。通常の環境では etc/profile は出力できますが、シェルが作ったサービスでは mysql 環境変数が出力できません;

    My /etc/frofile file:

    export PATH=/usr/local/mysql/bin:$PATH
    ログイン後にコピー

    Execution: mysql 環境変数が設定されていることがわかります

    [root@localhost init.d]# echo $PATH
    /usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    ログイン後にコピー

    次に、system V スクリプトを定義します

    [root@localhost init.d]# vi /etc/init.d/mysqlmul
    #!/bin/bash
    
    #chkconfig: - 75 15
    #description: test
    ログイン後にコピー

    権限を与え、サービスに設定します

    [root@localhost init.d]#chmod +x /etc/init.d/mysqlmul
    [root@localhost init.d]#chkconfig --add mysqlmul
    ログイン後にコピー

    サービスを実行します。結果、mysql 環境変数

    [root@localhost init.d]# service mysqlmul start
    /sbin:/usr/sbin:/bin:/usr/bin
    ログイン後にコピー

    Solution

    1 が存在しないことがわかります。export PATH=/usr/local/mysql/bin:$PATH

    # を追加します。 # /etc/init.d/xxx に設定したサービスに # 注:

    サービスにシェルスクリプトを入れる場合は、PATH などの環境を設定する必要があります。

    サービス ファイルでの環境変数ファイルの使用

    テストの準備

    c テスト プログラム

    LogTest.cpp の内容は次のとおりです。
    // 测试代码
    
    #include <stdio.h>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, const char* argv[])
    {
        int size = 0;
        // 解析传入参数(argc和argv),代码略
        // ...
        
    	cout << size <<endl;
        
    	while(1);
    	return 0;
    }
    ログイン後にコピー

    サービスファイル

    LogTest.serviceファイル

    [Unit]
    Description=LogTest
    After=network.target 
    
    [Service]
    Type=simple
    EnvironmentFile=-/etc/sysconfig/LogTest
    ExecStart=/usr/local/MyTest/LogTest -s ${TESTSIZE}
    ExecStop=/bin/kill -s QUIT $MAINPID
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=LogTest
    
    [Install]
    WantedBy=multi-user.target
    ログイン後にコピー

    環境変数ファイル

    環境変数ファイルLogTestが配置されます/etc/sysconfig /の内容の下にあります。

    # 环境变量文件,可根据需要新增
    TESTSIZE=10
    ログイン後にコピー

    テスト プロセス

    1) C テスト プログラムをコンパイルし、テスト プログラムを /usr/local/MyTest/ ディレクトリにコピーします。

    cp LogTest /usr/local/MyTest/

    2) ログ構成

    ログ関連の構成については、https://blog を参照してください。 csdn.net/www_dong/article/details/128053496。

    3) サービス ファイルの読み込み

    # 文件拷贝
    cp LogTest.service /usr/lib/systemd/system
    
    # 文件加载
    systemctl daemon-reload
    
    # 程序启动
    systemctl start LogTest
    
    # 查看进程是否启动成功
    ps -aux | grep LogTest
    ログイン後にコピー

    4) LogTest プログラム ログの表示

    # 进入日志所在目录
    cd /var/log
    
    # 查看LogTest.log
    cat LogTest.log
    ログイン後にコピー

    説明: ログには 10 が出力され、プロセス全体が成功したことを示します

    以上がLinuxサービスがシステム環境変数を使用できない問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:yisu.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート