前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Redhat6中获取LANG值为空

Redhat6中获取LANG值为空

作者头像
河边一枝柳
发布于 2021-08-06 07:21:40
发布于 2021-08-06 07:21:40
4K0
举报

问题描述

首先来描述一下我遇到的问题:如下图所示在我们产品中,服务脚本放置在目录/etc/init.d中,在用命令 "service xxx start" 后,脚本中启动应用程序ice_main,ice_main进程中使用命令 "locale" 来获取当前所使用的语言。但是获取的LANG的值为空......

问题追踪

首先,在安装了产品的Redhat5上查看是否存在同样的问题(检查是否是前辈遗留的历史问题),结果能够正常的获取LANG的值;初步说明代码在获取当前所使用的语言的方法没有问题;

然后,在Redhat6,shell命令行里输入 "locale" , 查看结果LANG的值并不为空:

[plain] view plaincopy

1. [root@rhel6_64_khm /]# locale

2. LANG=en_US.UTF-8

3. LC_CTYPE="en_US.UTF-8"

4. LC_NUMERIC="en_US.UTF-8"

5. LC_TIME="en_US.UTF-8"

6. LC_COLLATE="en_US.UTF-8"

7. LC_MONETARY="en_US.UTF-8"

8. LC_MESSAGES="en_US.UTF-8"

9. LC_PAPER="en_US.UTF-8"

10.LC_NAME="en_US.UTF-8"

11.LC_ADDRESS="en_US.UTF-8"

12.LC_TELEPHONE="en_US.UTF-8"

13.LC_MEASUREMENT="en_US.UTF-8"

14.LC_IDENTIFICATION="en_US.UTF-8"

15.LC_ALL=

这样问题就更加奇怪了,在我默认的知识里,shell相当于是这一系列进程的父进程,子进程应该继承父进程的环境变量。

接着,就开始进行代码审查,查看ice_main代码中是否对Redhat6平台进行了特殊处理,或者在代码中是否对环境变量进行了重新设置,结果是没有。那LANG到底在哪一步被更改了呢? 最后,当你没有任何进展的时候,就应该采用最笨的方式,从头到尾仔细检查每一个步骤。我开始从进程的源头查看,首先我们使用了命令 "service xxx start" ,这一个命令包含了三个步骤:Shell创建子进程执行service 脚本 (/sbin/service),service 脚本执行进程创建子进程执行xxx脚本,那么既然在shell中能够获取LANG的值并且不为空,那么让我们来看一下Redhat6中的/sbin/service脚本,果不其然,最后调用如下命令去执行xxx脚本:

[plain] view plaincopy

1. env -i PATH="{SERVICEDIR}/{SERVICE}"

既然看不懂env命令,那咱么就来man一下(man env):

[plain] view plaincopy

1. -i, --ignore-environment

2. start with an empty environment

对,问题就在这里,参数 "-i" 让其子进程采用空的环境变量。

那我们再一起来看看Redhat5中的/sbin/service脚本,可以看到其中虽然使用了参数'-i',但随后还是将本进程LANG的值传递给子进程,所以产品在Redhat5中执行时,可以获取非空的LANG:

[plain] view plaincopy

1. env -i LANG="TERM" "{SERVICE}"

问题解决

这个问题解决思路也比较简单,我个人有两个建议:

1. 采用命令行 "/etc/init.d/xxx" 来调用执行脚本

2. 从文件 "/etc/sysconfig/i18n" 中读取LANG的值

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个程序员的修炼之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Oracle触发器-imooc
每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。
chenchenchen
2023/01/30
1.3K0
Oracle触发器
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
颍川
2019/11/21
9770
Oracle触发器详细讲解
CREATE OR REPLACE TRIGGER scott_trigger BEFORE DDL ON SCHEMA BEGIN   RAISE_APPLICATION_ERROR(-20008,'禁止scott用户的所有ddl操作'); END;create sequence myseq;
星哥玩云
2022/08/17
9740
Oracle触发器详细讲解
快速学习Oracle-触发器
数据库触发器是一个与表相关联的、存储的 PL/SQL 程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle 自动地执行触发器中定义的语句序列。
cwl_java
2019/12/19
5960
Oracle-trigger触发器解读
每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。
小小工匠
2021/08/16
1.2K0
oracle触发器报错语法,Oracle 触发器
Oracle触发器是使用者对Oracle数据库的对象做特定的操作时,触发的一段PL/SQL程序代码,叫做触发器。触发的事件包括对表的DML操作,用户的DDL操作以及数据库事件等。
全栈程序员站长
2022/09/08
2.2K0
oracle触发器报错语法,Oracle 触发器
ORACLE触发器(trigger)的使用
触发器是一种在事件发生时隐式地自动执行的PL/SQL块,不能接受参数,不能被显式调用
全栈程序员站长
2022/09/13
1.1K0
ORACLE触发器(trigger)的使用
oracle的行级触发器使用
行级触发器: 当触发器被触发时,要使用被插入、更新或删除的记录中的列值,有时要使用操作前、后列的值. :NEW 修饰符访问操作完成后列的值 :OLD 修饰符访问操作完成前列的值 例1: 建立一个触发器
庞小明
2018/04/18
1.7K0
oracle的行级触发器使用
PL/SQL --> DML 触发器
何谓触发器?简言之,是一段命名的PL/SQL代码块,只不过该代码块在特定的条件下被触发并且执行。对于这样的代码我们称之为触发器
Leshami
2018/08/07
1.5K0
ORACLE触发器具体解释
触发器是很多关系数据库系统都提供的一项技术。在ORACLE系统里,触发器类似过程和函数,都有声明,运行和异常处理过程的PL/SQL块。
全栈程序员站长
2022/07/13
1.2K0
Oracle触发器用法实例详解
详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。
星哥玩云
2022/08/17
1.1K0
Oracle触发器用法实例详解
Oracle 触发器详解(trigger)「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157665.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/14
3.8K0
触发器学习笔记(:new,:old用法)
转载自:https://www.2cto.com/database/201301/186334.html
qubianzhong
2019/06/26
9670
Oracle学习笔记四
在写java程序中有集合的概念,那么在pl/sq中也会用到多条记录,这时候我们就要用到游标,游标可以存储查询返回的多条数据。
Kevin_Zhang
2018/09/20
1.3K0
Oracle学习笔记四
ORACLE语句级触发器的实现
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处
overme
2022/01/15
5430
ORACLE语句级触发器的实现
Oracle触发器概念和模板
当定义的 '触发条件' 成立时,其语句就会 '自动执行'  ,触发条件可以是对表数据的新增修改或者删除等。触发器的作用保护数据的安全,监视对数据的各种操作,如  '日志记录': 对重要表的 '修改' 进行记录。
共饮一杯无
2022/11/24
3510
Oracle总结【PLSQL学习】
PLSQL介绍 PLSQL是Oracle对SQL99的一种扩展,基本每一种数据库都会对SQL进行扩展,Oracle对SQL的扩展就叫做PLSQL… SQL99是什么 (1)是操作所有关系型数据库的规则 (2)是第四代语言 (3)是一种结构化查询语言 (4)只需发出合法合理的命令,就有对应的结果显示 SQL的特点 (1)交互性强,非过程化 (2)数据库操纵能力强,只需发送命令,无需关注如何实现 (3)多表操作时,自动导航简单,例如: select emp.empno,emp.sal,dept.dname fr
Java3y
2018/03/15
2.4K0
Oracle总结【PLSQL学习】
触发器
一:什么是触发器 触发器是一种响应特定事件的特殊类型的存储过程 insert update... drop alter...等事件都有相应的触发器 二:简单的触发器 下面一个例子是在插入或者修改记录的时候的一个触发器 其中inserted表是一个临时表 存储的是将要插入的信息 这个触发器的目的是检查将要插入的信息是否符合规定 (在product表里没有特殊的记录) 这个例子是check约束所不能解决的了的
liulun
2022/05/08
1.3K0
Oracle11g全新讲解之触发器和视图索引
  根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合。它存储了要执行检索的 查询语句的定义 ,以便在引用该视图时使用。
用户4919348
2023/05/27
4620
Oracle11g全新讲解之触发器和视图索引
day44_Oracle学习笔记_03
先去Oracle官网去下载最新版本的sqldeveloper,下载地址:https://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html 得到2个zip压缩包,如下图所示:
黑泽君
2018/10/11
1.8K0
day44_Oracle学习笔记_03
相关推荐
Oracle触发器-imooc
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文