之前在做一個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等環境。
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中文網其他相關文章!