Linux service无法使用系统环境变量的问题及解决

目录
  • Linux service无法使用系统环境变量
    • 详细描述
    • 问题探索
    • 解决办法
  • service文件中环境变量文件的使用
    • 测试准备
    • 测试流程
  • 总结

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,说明整个流程成功

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈Linux下修改/设置环境变量JAVA_HOME的方法

    1. 永久修改,对所有用户有效 # vi /etc/profile //按键盘[Shift + g], 在profile文件最后添加下面的内容: JAVA_HOME=/usr/local/java/jdk1.7.0_25 JRE_HOME=$JAVA_HOME/jre CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$PATH export PATH JAVA_HOME JRE_HOME C

  • Linux中修改环境变量及生效方法

    在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是"永久的". 要让刚才的修改马上生效,需要执行以下代码 source /etc/profile 以上这篇Linux中修改环境变量及生效方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Linux中Bash环境变量的配置方法

    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. 以下是几种shell版本,bash是默认的: sh(全称 Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用. Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell. bash(全称 Bourne Again Shell): LinuxOS 默认的,它是 Bou

  • Linux service无法使用系统环境变量的问题及解决

    目录 Linux service无法使用系统环境变量 详细描述 问题探索 解决办法 service文件中环境变量文件的使用 测试准备 测试流程 总结 Linux service无法使用系统环境变量 详细描述 之前在做一个mysql多实例安装时,安装成功,linux也能成功启动:但是将support-files/mysqld_multi.server移动到/etc/init.d/目录下并设置开机启动(chkconfig xxx on)失败: 问题探索 发现了问题,开始解决,发现service xx

  • Linux系统设置PATH环境变量(3种方法)

    1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错误. 2.那么什么是环境变量?简单说,就是指定一个目录,运行软件的时候,相关的程序将会按照该目录寻找相关文件. 设置变量对于一般人最实用的功能就是: 不用拷贝某些dll文件到系统目录中了,而path 这一系统变量就是系统搜索dll文件的一系列路径 在Linux系统下,如果你下载并安装应用程序,很有可能在键入它的名称的时候出现

  • GO语言获取系统环境变量的方法

    本文实例讲述了GO语言获取系统环境变量的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (  "fmt"  "os"  //我们要用到os包中的env ) func main() {  //os.Getenv检索环境变量并返回值,如果变量是不存在的,这将是空的.  HOME:= os.Getenv("HOME")  fmt.Println(HOME)  fmt.Printf(os.Ge

  • Perl操作系统环境变量的脚本代码

    如何用Perl脚本操作系统环境变量呢? 想必很多朋友马上就会想到Perl中提供的$ENV这个特殊的哈希变量,对,在$ENV中完全可以获取到一些系统变量.怎么获取呢?比如想要知道Path这个系统环境变量的内容,我们可以通过$ENV{'Path'} 来获取.如果想设置Path这个环境变量呢,哈,使用$ENV{'Path'}='C:\Windows\System32'来设置.想获取所有的环境变量列表也很简单,哈希遍历不就可以了~ 其实,本文中真正想问的是,你在通过上述方法设置了一个环境变量后,右击"我

  • 解决Django模板无法使用perms变量问题的方法

    前言 本文主要给大家介绍了关于Django模板无法使用perms变量的解决方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 解决方法: 首先,在使用Django内置权限管理系统时,settings.py文件要添加 INSTALLED_APPS添加: 'django.contrib.auth', MIDDLEWARE添加: 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.au

  • python访问系统环境变量的方法

    本文实例讲述了python访问系统环境变量的方法.分享给大家供大家参考.具体如下: #-------------------------------- # Name: enviroment_variables.py # Author: Kevin Harris # Last Modified: 02/13/04 # Description: This Python script demonstrates # how to acces enviroment variables. #--------

  • 通过批处理bat设置系统环境变量的实现代码

    在软件运行过程中,可能需要配置计算机的环境变量,在这里分为两种情况: 一:增加或修改环境变量只在当前软件环境中使用 如我们设置Java的环境变量: set CLASSPATH=%CLASSPATH%;C:\LS\JAVA.JAR 保持原有的不变  自己加上要加的jar包,用分号隔开,当然你也可以写到前面,如:set CLASSPATH=D:/My_Path;%CLASSPATH% set JAVA_HOME=  这里的路径自己写吧 不过这样写只对你打开的这个dos窗口有效,也就是你只有在这个窗口

  • 详解 MAC/Linux Vi配置环境变量及Java环境变量配置

    详解 MAC/Linux Vi配置环境变量及Java环境变量配置 vi基础 1.vi的基本概念 (1)基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模式command mode) 控制屏幕光标的移动,字符.字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode. 2) 插入模式(Insert mode) 只有在Ins

  • Linux Crontab 获取环境变量配置解析

    使用Laravel分版本环境部署时遇到的问题 Crontab 执行 Laravel 获取不到用户全局变量,通过查阅资料获知 Crontab 载入配置的时候 并未载入 /etc/profile : 针对这个现象 初期解决方式是在Crontab 任务内添加配置文件载入 * * * * * source /etc/profile && php task.php 或 * * * * * export PHP_ENV=prod && php task.php 或 * * * * *

随机推荐