博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Saltstack运行cmd.run重新启动tomcat后出现日志乱码(15)
阅读量:7287 次
发布时间:2019-06-30

本文共 3435 字,大约阅读时间需要 11 分钟。

Saltstack使用的cmd.run调用的是核心模块cmdmod.py,以下我们来看一下cmdmod.py模块的源代码:

cat /usr/lib/python2.6/site-packages/salt/modules/cmdmod.py......    if reset_system_locale is True:        if not salt.utils.is_windows():            # Default to C!            # Salt only knows how to parse English words            # Don't override if the user has passed LC_ALL            env.setdefault('LC_ALL', 'C')      #默认设置为“C”        else:            # On Windows set the codepage to US English.            if python_shell:                cmd = 'chcp 437 > nul & ' + cmd.....#run函数def run(cmd,        cwd=None,        stdin=None,        runas=None,        shell=DEFAULT_SHELL,        python_shell=None,        env=None,        clean_env=False,        template=None,        rstrip=True,        umask=None,        output_loglevel='debug',        timeout=None,        reset_system_locale=True,        ignore_retcode=False,        saltenv='base',        use_vt=False,        **kwargs):......

 
从上可知,Salt在运行cmd.run前会将minion端的字符集默认设置为“C”,而眼下大部分tomcat应用使用的是UTF-8字符集,所以Salt运行cmd.run重新启动tomcat后会出现日志乱码。

其实。从早期的Salt版本号。以及截至到眼下最新的Salt的RPM版本号2015.5.5,在运行cmd.run前都会将minion端的字符集默认设置为“C”,依照我们的思想,这是一个BUG。

解决的方法:

1.改动源代码

cat /usr/lib/python2.6/site-packages/salt/modules/cmdmod.py......    if reset_system_locale is True:        if not salt.utils.is_windows():            # Default to C!            # Salt only knows how to parse English words            # Don't override if the user has passed LC_ALL            pass        else:            # On Windows set the codepage to US English.            if python_shell:                cmd = 'chcp 437 > nul & ' + cmd......

cat /usr/lib/python2.6/site-packages/salt/modules/cmdmod.py......#run函数def run(cmd,        cwd=None,        stdin=None,        runas=None,        shell=DEFAULT_SHELL,        python_shell=None,        env=None,        clean_env=False,        template=None,        rstrip=True,        umask=None,        output_loglevel='debug',        timeout=None,        reset_system_locale=False,        ignore_retcode=False,        saltenv='base',        use_vt=False,        **kwargs):......

 
改动源代码必须保证master端和minion端都被改动。后期新增minion端还要改动,十分麻烦。

如此能够考虑以下这样的方法:

2.运行cmd.run前设定LC_ALL为空

命令行运行:

如:

salt '10.0.10.100' cmd.run  'locale' env='{"LC_ALL": ""}'    #添加參数env='{"LC_ALL": ""}'
编写state.sls:

locale:  cmd.run:    - name: locale    - env:      - LC_ALL: ""

以上就可以解决运行cmdmod.py改动字符集的问题。

值得庆幸的是。https://github.com/saltstack/salt上眼下最新版的salt 2015.8.3已经将这个问题攻克了,新的cmdmod.py源代码改动例如以下:

......    if reset_system_locale is True:        if not salt.utils.is_windows():            # Default to C!            # Salt only knows how to parse English words            # Don't override if the user has passed LC_ALL            env.setdefault('LC_CTYPE', 'C')            env.setdefault('LC_NUMERIC', 'C')            env.setdefault('LC_TIME', 'C')            env.setdefault('LC_COLLATE', 'C')            env.setdefault('LC_MONETARY', 'C')            env.setdefault('LC_MESSAGES', 'C')            env.setdefault('LC_PAPER', 'C')            env.setdefault('LC_NAME', 'C')            env.setdefault('LC_ADDRESS', 'C')            env.setdefault('LC_TELEPHONE', 'C')            env.setdefault('LC_MEASUREMENT', 'C')            env.setdefault('LC_IDENTIFICATION', 'C')        else:            # On Windows set the codepage to US English.            if python_shell:                cmd = 'chcp 437 > nul & ' + cmd......
仍是默认设置字符集为“C”,可是不再是”LC_ALL“为”C“

转载地址:http://sapjm.baihongyu.com/

你可能感兴趣的文章
从零到有的突破:BCH爱好者聚集地BCH.Club公测上线
查看>>
自建容器映像登录也行?Quay整合多种进阶功能
查看>>
如何快速打造一款高清又极速的短视频APP?
查看>>
总结sqlserver2012删除语法:delete数据表中的某一项内容
查看>>
网站建设就要像2018世界杯的俄罗斯队大杀四方[图]
查看>>
118.kubectl命令用法
查看>>
药品监管系统架构揭秘:海量溯源数据存储与查询
查看>>
父传子,关于清楚子组件提交之后页面的数据
查看>>
Java 命令行交互输入库 JLine 入门
查看>>
举个栗子看如何做MySQL 内核深度优化
查看>>
asp.net 虹软 人脸识别 实现刷脸住宿、刷脸签到、刷脸进入等
查看>>
tomcat服务器输入localhost可以访问,ip无法访问解决办法
查看>>
js 实现异步上传图片+预览
查看>>
Java 趣史-差点把 Java 命名成了 Silk(丝绸)
查看>>
死磕 java集合之ConcurrentLinkedQueue源码分析
查看>>
ubuntu安装sun jdk6
查看>>
phalapi-入门篇4(国际化高可用和自动生成文档)
查看>>
xcode报错集锦_1
查看>>
hadoop-mapreduce分析
查看>>
多线程学习(4)wait/notify
查看>>