Linux service無法使用系統(tǒng)環(huán)境變量的問題及解決
Linux service無法使用系統(tǒng)環(huán)境變量
詳細(xì)描述
之前在做一個mysql多實(shí)例安裝時,安裝成功,linux也能成功啟動;但是將support-files/mysqld_multi.server移動到/etc/init.d/目錄下并設(shè)置開機(jī)啟動(chkconfig xxx on)失??;
問題探索
發(fā)現(xiàn)了問題,開始解決,發(fā)現(xiàn)service xxx start 無法啟動mysql的多實(shí)例,但是mysqld_multi start就可以使用;然后經(jīng)過各種嘗試,發(fā)現(xiàn)在普通環(huán)境下可以打印出/etc/profile設(shè)置的mysql環(huán)境變量,但是在shell做成的service中無法打印該mysql環(huán)境變量;
我的/etc/frofile文件:
export PATH=/usr/local/mysql/bin:$PATH
執(zhí)行:可以看到是有設(shè)置的mysql環(huán)境變量的
[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
賦予權(quán)限并設(shè)置為service
[root@localhost init.d]#chmod +x /etc/init.d/mysqlmul [root@localhost init.d]#chkconfig --add mysqlmul
執(zhí)行service:結(jié)果可以看到是沒有mysql環(huán)境變量的
[root@localhost init.d]# service mysqlmul start /sbin:/usr/sbin:/bin:/usr/bin
解決辦法
1、在/etc/init.d/xxx剛才設(shè)置的service中添加export PATH=/usr/local/mysql/bin:$PATH
注意:
當(dāng)把一個shell腳本放入到service中時,需要設(shè)定好PATH等環(huán)境。
service文件中環(huán)境變量文件的使用
測試準(zhǔn)備
c++測試程序
LogTest.cpp內(nèi)容如下:
// 測試代碼
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, const char* argv[])
{
int size = 0;
// 解析傳入?yún)?shù)(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 ??環(huán)境變量文件
環(huán)境變量文件LogTest放在/etc/sysconfig/目錄下。
# 環(huán)境變量文件,可根據(jù)需要新增 TESTSIZE=10
測試流程
1)編譯c++測試程序,并將測試程序拷貝至/usr/local/MyTest/目錄下。
cp LogTest /usr/local/MyTest/
2)日志配置
關(guān)于日志相關(guān)配置,可查看https://blog.csdn.net/www_dong/article/details/128053496。
3)service文件加載
# 文件拷貝 cp LogTest.service /usr/lib/systemd/system # 文件加載 systemctl daemon-reload # 程序啟動 systemctl start LogTest # 查看進(jìn)程是否啟動成功 ps -aux | grep LogTest
4)查看LogTest程序日志
# 進(jìn)入日志所在目錄 cd /var/log # 查看LogTest.log cat LogTest.log
說明: 日志打印出10,說明整個流程成功
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
centos8使用Docker部署Django項(xiàng)目的詳細(xì)教程
這篇文章主要介紹了在centos8使用Docker部署Django項(xiàng)目的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
CentOS7環(huán)境搭建python3以及與python2實(shí)現(xiàn)共存的方法
這篇文章主要介紹了CentOS7環(huán)境搭建python3以及與python2實(shí)現(xiàn)共存的方法,結(jié)合實(shí)例形式簡單分析了CentOS7環(huán)境下安裝Python3的步驟、命令及測試代碼示例,非常簡單易懂,需要的朋友可以參考下2018-06-06
CentOS 6.5平臺實(shí)現(xiàn)快速部署FTP的方法
這篇文章主要介紹了CentOS 6.5平臺實(shí)現(xiàn)快速部署FTP的方法,結(jié)合實(shí)例形式分析了CentOS6.5平臺配置與部署FTP的具體步驟、相關(guān)操作命令與注意事項(xiàng),需要的朋友可以參考下2018-04-04
詳解linux系統(tǒng)目錄sys,tmp,usr,var!
在本篇文章里小編給大家詳解了關(guān)于linux系統(tǒng)目錄,sys,tmp,usr,var!的相關(guān)知識點(diǎn)內(nèi)容,有興趣的朋友們參考下。2019-06-06
如何確保Apache?Flink流處理的數(shù)據(jù)一致性和可靠性
Apache?Flink通過其先進(jìn)的狀態(tài)管理、檢查點(diǎn)機(jī)制、時間語義和容錯策略,確保了在流處理中的高數(shù)據(jù)一致性和可靠性,本文詳細(xì)介紹了Flink中保證數(shù)據(jù)一致性和可靠性的機(jī)制,感興趣的朋友一起看看吧2024-08-08

