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

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

王林
王林転載
2023-05-16 19:28:261139ブラウズ

    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 までご連絡ください。