首頁  >  文章  >  運維  >  Linux service無法使用系統環境變數問題如何解決

Linux service無法使用系統環境變數問題如何解決

王林
王林轉載
2023-05-16 19:28:261139瀏覽

    Linux service無法使用系統環境變數

    詳細描述

    之前在做一個mysql多實例安裝時,安裝成功,linux也能成功啟動;但是將support-files/mysqld_multi.server移到/etc/init.d/目錄下並設定開機啟動(chkconfig xxx on)失敗;

    #問題探索

    #發現了問題,開始解決,發現service xxx start 無法啟動mysql的多實例,但是mysqld_multi start就可以使用;然後經過各種嘗試,發現在普通環境下可以打印出/etc/profile設定的mysql環境變量,但是在shell做成的service中無法列印該mysql環境變數;

    我的/etc/frofile檔案:

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

    執行:可以看到是有設定的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

    賦予權限並設定為service

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

    執行service:結果可以看到是沒有mysql環境變數的

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

    解決辦法

    1、在/etc/init.d/xxx剛才設定的service中加入export PATH=/usr/local/mysql/bin:$PATH

    #註:

    當把一個shell腳本放入service時,需要設定好PATH等環境。

    service檔案中環境變數檔案的使用

    測試準備

    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)service檔案載入

    # 文件拷贝
    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 service無法使用系統環境變數問題如何解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除