Maison > Opération et maintenance > exploitation et maintenance Linux > 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

王林
Libérer: 2023-05-16 19:28:26
avant
1197 Les gens l'ont consulté

    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
    Copier après la connexion

    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
    Copier après la connexion

    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
    Copier après la connexion

    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
    Copier après la connexion

    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
    Copier après la connexion

    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;
    }
    Copier après la connexion

    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
    Copier après la connexion

    Fichier de variable d'environnement

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

    # 环境变量文件,可根据需要新增
    TESTSIZE=10
    Copier après la connexion

    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
    Copier après la connexion

    4) Consultez le journal du programme LogTest

    # 进入日志所在目录
    cd /var/log
    
    # 查看LogTest.log
    cat LogTest.log
    Copier après la connexion
    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!

    Étiquettes associées:
    source:yisu.com
    Déclaration de ce site Web
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal