Linux service無(wú)法使用系統(tǒng)環(huán)境變量的問(wèn)題及解決
Linux service無(wú)法使用系統(tǒng)環(huán)境變量
詳細(xì)描述
之前在做一個(gè)mysql多實(shí)例安裝時(shí),安裝成功,linux也能成功啟動(dòng);但是將support-files/mysqld_multi.server移動(dòng)到/etc/init.d/目錄下并設(shè)置開(kāi)機(jī)啟動(dòng)(chkconfig xxx on)失敗;
問(wèn)題探索
發(fā)現(xiàn)了問(wèn)題,開(kāi)始解決,發(fā)現(xiàn)service xxx start 無(wú)法啟動(dòng)mysql的多實(shí)例,但是mysqld_multi start就可以使用;然后經(jīng)過(guò)各種嘗試,發(fā)現(xiàn)在普通環(huán)境下可以打印出/etc/profile設(shè)置的mysql環(huán)境變量,但是在shell做成的service中無(wú)法打印該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
然后我們定義一個(gè)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é)果可以看到是沒(méi)有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)把一個(gè)shell腳本放入到service中時(shí),需要設(shè)定好PATH等環(huán)境。
service文件中環(huán)境變量文件的使用
測(cè)試準(zhǔn)備
c++測(cè)試程序
LogTest.cpp內(nèi)容如下:
// 測(cè)試代碼 #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
測(cè)試流程
1)編譯c++測(cè)試程序,并將測(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 # 程序啟動(dòng) systemctl start LogTest # 查看進(jìn)程是否啟動(dòng)成功 ps -aux | grep LogTest
4)查看LogTest程序日志
# 進(jìn)入日志所在目錄 cd /var/log # 查看LogTest.log cat LogTest.log
說(shuō)明: 日志打印出10,說(shuō)明整個(gè)流程成功
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux如何修改hosts文件并刷新DNS生效hosts文件
這篇文章主要介紹了Linux如何修改hosts文件并刷新DNS生效hosts文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07詳解Linux動(dòng)態(tài)庫(kù)生成與使用指南
這篇文章主要介紹了詳解Linux動(dòng)態(tài)庫(kù)生成與使用指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Ubuntu中添加應(yīng)用程序快速啟動(dòng)器的方法
這篇文章主要介紹了Ubuntu中添加應(yīng)用程序快速啟動(dòng)器的方法,需要的朋友可以參考下2014-09-09Linux 3.X/4.x/5.x 忘記寶塔面板密碼的解決方法
在本篇文章里我們給大家整理的是關(guān)于忘記Linux 3.X/4.x/5.x 寶塔面板密碼的解決方案,有需要的朋友們可以學(xué)習(xí)下。2019-10-10詳解如何實(shí)現(xiàn)Linux服務(wù)Crash后自動(dòng)重啟
近期碰到了一個(gè)?Linux?Systemd?服務(wù)?Crash,?Crash?后需要人工介入重啟.?那么,?有沒(méi)有辦法如何實(shí)現(xiàn)?Linux?服務(wù)?Crash?后自動(dòng)重啟,下面就來(lái)和大家分享一下2023-08-08Linux中date命令轉(zhuǎn)換日期提示date: illegal time format問(wèn)題解決
date命令是顯示或設(shè)置系統(tǒng)時(shí)間與日期,最近在使用中發(fā)現(xiàn)了一個(gè)問(wèn)題,所以下面這篇文章主要給大家介紹了關(guān)于Linux中date命令轉(zhuǎn)換日期提示date: illegal time format錯(cuò)誤的解決方法,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起看看吧。2017-12-12詳解Lamp環(huán)境搭建Linux CentOS6.5編譯安裝mysql5.6
這篇文章主要介紹了詳解Lamp環(huán)境搭建Linux CentOS6.5編譯安裝mysql5.6,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05linux查看系統(tǒng)編碼和修改系統(tǒng)編碼的方法
本文為大家介紹了linux查看系統(tǒng)編碼和修改系統(tǒng)編碼的方法,這里使用的是redhat系統(tǒng),大家參考使用吧2014-01-01