日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

salt java 日志 乱码_Saltstack执行cmd.run重启tomcat后出现日志乱码(15)

發(fā)布時間:2023/12/2 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 salt java 日志 乱码_Saltstack执行cmd.run重启tomcat后出现日志乱码(15) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Saltstack使用的cmd.run調(diào)用的是核心模塊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') #默認設(shè)置為“C”

else:

# On Windows set the codepage to US English.

if python_shell:

cmd = 'chcp 437 > nul & ' + cmd

.....

#run函數(shù)

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在執(zhí)行cmd.run前會將minion端的字符集默認設(shè)置為“C”,而目前大部分tomcat應(yīng)用使用的是UTF-8字符集,所以Salt執(zhí)行cmd.run重啟tomcat后會出現(xiàn)日志亂碼。

事實上,從早期的Salt版本,以及截至到目前最新的Salt的RPM版本2015.5.5,在執(zhí)行cmd.run前都會將minion端的字符集默認設(shè)置為“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函數(shù)

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.執(zhí)行cmd.run前設(shè)定LC_ALL為空

命令行執(zhí)行:

如:

salt '10.0.10.100' cmd.run 'locale' env='{"LC_ALL": ""}' #增加參數(shù)env='{"LC_ALL": ""}'

編寫state.sls:

locale:

cmd.run:

- name: locale

- env:

- LC_ALL: ""

以上即可解決執(zhí)行cmdmod.py修改字符集的問題。

值得慶幸的是,https://github.com/saltstack/salt上目前最新版的salt 2015.8.3已經(jīng)將這個問題解決了,新的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

......

仍是默認設(shè)置字符集為“C”,但是不再是”LC_ALL“為”C“

總結(jié)

以上是生活随笔為你收集整理的salt java 日志 乱码_Saltstack执行cmd.run重启tomcat后出现日志乱码(15)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。