设为首页 收藏本站
查看: 1487|回复: 0

[经验分享] Saltstack运行cmd.run重新启动tomcat后出现日志乱码(15)

[复制链接]

尚未签到

发表于 2018-1-3 23:20:21 | 显示全部楼层 |阅读模式
  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“  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431360-1-1.html 上篇帖子: saltstack api安装使用 下篇帖子: saltstack主机管理项目【day23】:主机管理项目需求分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表