Maison  >  Article  >  Opération et maintenance  >  Comment résoudre le problème selon lequel le service Linux ne peut pas utiliser les variables d'environnement système

Comment résoudre le problème selon lequel le service Linux ne peut pas utiliser les variables d'environnement système

王林
王林avant
2023-05-16 19:28:261143parcourir

    Le service Linux ne peut pas utiliser les variables d'environnement système

    Description détaillée

    Lors d'une installation multi-instance de MySQL auparavant, l'installation a réussi et Linux a également pu démarrer avec succès, mais support-files/mysqld_multi.server a été déplacé vers ; /etc /init.d/ et la configuration du démarrage (chkconfig xxx activé) ont échoué ;

    Exploration du problème

    a trouvé le problème et a commencé à le résoudre, et a constaté que le service xxx start ne peut pas démarrer plusieurs instances de mysql, mais mysqld_multi start peut être utilisé;puis Après plusieurs tentatives, j'ai découvert que la variable d'environnement mysql définie par /etc/profile peut être imprimée dans un environnement normal, mais que la variable d'environnement mysql ne peut pas être imprimée dans le service créé par le shell

    My ; /etc/frofile :

    export PATH=/usr/local/mysql/bin:$PATH

    Exécution : vous pouvez voir qu'il existe un jeu de variables d'environnement mysql

    [root@localhost init.d]# echo $PATH
    /usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

    Ensuite, nous définissons un script système V

    [root@localhost init.d]# vi /etc/init.d/mysqlmul
    #!/bin/bash
    
    #chkconfig: - 75 15
    #description: test

    Donnez des autorisations et définissez-le sur service

    [root@localhost init.d]#chmod +x /etc/init.d/mysqlmul
    [root@localhost init.d]#chkconfig --add mysqlmul

    Exécuter le service : en tant que résultat, vous pouvez voir qu'il n'y a pas de variable d'environnement mysql

    [root@localhost init.d]# service mysqlmul start
    /sbin:/usr/sbin:/bin:/usr/bin

    Solution

    1. Ajoutez export PATH=/usr/local/mysql/bin:$PATH

    au service que vous venez de définir dans /etc/init.d. /xxx Lorsque le script est placé dans le service, l'environnement tel que PATH doit être défini.

    Utilisation du fichier de variable d'environnement dans le fichier de service

    Préparation du test

    Programme de test c++

    Le contenu de LogTest.cpp est le suivant :

    // 测试代码
    
    #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;
    }

    fichier de service

    Fichier 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

    Fichier de variable d'environnement

    Le fichier de variable d'environnement LogTest est placé dans le répertoire /etc/sysconfig/.

    # 环境变量文件,可根据需要新增
    TESTSIZE=10

    Processus de test

    1) Compilez le programme de test c++ et copiez le programme de test dans le répertoire /usr/local/MyTest/.

    cp LogTest /usr/local/MyTest/

    2) Configuration du journal

    Pour la configuration liée au journal, veuillez consulter https://blog.csdn.net/www_dong/article/details/128053496.

    3) Chargez le fichier de service

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

    4) Consultez le journal du programme LogTest

    # 进入日志所在目录
    cd /var/log
    
    # 查看LogTest.log
    cat LogTest.log

    Remarque : le journal imprime 10, indiquant que l'ensemble du processus est réussi

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer