Home > Operation and Maintenance > Linux Operation and Maintenance > How to solve the problem that Linux service cannot use system environment variables

How to solve the problem that Linux service cannot use system environment variables

王林
Release: 2023-05-16 19:28:26
forward
1187 people have browsed it

    Linux service cannot use system environment variables

    Detailed description

    When doing a mysql multi-instance installation before, the installation was successful, linux It can also be started successfully; however, moving support-files/mysqld_multi.server to the /etc/init.d/ directory and setting the startup (chkconfig xxx on) fails;

    Problem Exploration

    I found the problem and started to solve it. I found that service xxx start could not start multiple instances of mysql, but mysqld_multi start could be used; then after various attempts, I found that the mysql environment variables set by /etc/profile could be printed out in a normal environment, but The mysql environment variable cannot be printed in the service made by the shell;

    My /etc/frofile file:

    export PATH=/usr/local/mysql/bin:$PATH
    Copy after login

    Execution: You can see that the mysql environment variable is set

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

    Then we define a system V script

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

    Give permissions and set it to service

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

    Execute service: As a result, you can see that there is no mysql environment variable

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

    Solution

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

    ## to the service just set in /etc/init.d/xxx #Note:

    When putting a shell script into the service, you need to set the PATH and other environments.

    Use of environment variable files in service files

    Test preparation

    c Test program

    The contents of LogTest.cpp are as follows:

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

    service file

    LogTest.service file

    [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
    Copy after login

    Environment variable file

    Environment variable file LogTest is placed in /etc/sysconfig /Under contents.

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

    Test process

    1) Compile the c test program and copy the test program to the /usr/local/MyTest/ directory.

    cp LogTest /usr/local/MyTest/

    2) Log configuration

    For log related configuration, please view https://blog. csdn.net/www_dong/article/details/128053496.

    3) Service file loading

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

    4) View LogTest program log

    # 进入日志所在目录
    cd /var/log
    
    # 查看LogTest.log
    cat LogTest.log
    Copy after login
    Description: The log prints out 10, indicating that the entire process is successful

    The above is the detailed content of How to solve the problem that Linux service cannot use system environment variables. For more information, please follow other related articles on the PHP Chinese website!

    Related labels:
    source:yisu.com
    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
    Popular Tutorials
    More>
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template