Linux 서비스에서 시스템 환경변수를 사용할 수 없는 문제를 해결하는 방법

王林
풀어 주다: 2023-05-16 19:28:26
앞으로
1170명이 탐색했습니다.

    Linux 서비스는 시스템 환경 변수를 사용할 수 없습니다

    자세한 설명

    이전에 mysql 다중 인스턴스 설치를 할 때 설치가 성공적으로 이루어졌고 Linux도 성공적으로 시작할 수 있었지만 support-files/mysqld_multi.server가 다음 위치로 이동되었습니다. /etc /init.d/ 디렉토리 및 시작 설정(chkconfig xxx on)에 실패했습니다.

    문제 탐색

    문제를 발견하고 해결하기 시작했으며 서비스 xxx start가 mysql의 여러 인스턴스를 시작할 수 없다는 것을 발견했습니다. 다양한 시도 끝에 /etc/profile에서 설정한 mysql 환경 변수는 일반 환경에서 출력할 수 있지만, 쉘에서 만든 서비스에서는 mysql 환경 변수를 출력할 수 없다는 사실을 발견했습니다. /etc/frofile 파일:

    export PATH=/usr/local/mysql/bin:$PATH
    로그인 후 복사

    실행: mysql 환경 변수 set

    [root@localhost init.d]# echo $PATH
    /usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    로그인 후 복사
    가 있는 것을 볼 수 있습니다

    그런 다음 시스템 V 스크립트를 정의합니다

    [root@localhost init.d]# vi /etc/init.d/mysqlmul
    #!/bin/bash
    
    #chkconfig: - 75 15
    #description: test
    로그인 후 복사

    권한을 부여하고 service

    [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이 없음을 확인할 수 있습니다. 추가 내보내기 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;
    }
    로그인 후 복사

    service 파일

    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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:yisu.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿