日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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“

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。