SSH 登陸服務器locale告警(-bash: warning: setlocale:)的處理方法


 

使用ssh遠程登陸 IDC機房服務器,發現老是出現如下告警信息

-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory

原因分析:

根據上面登錄警告提示可知,系統已經設置了默認地區_語言.字符集為en_US.UTF-8,但是在系統中沒有定義對應的locale文件,
所以只需要手動生成這個locale文件即可!

解決辦法:

[root@centos6-vm01 ~]# vim /etc/environment         #添加下面兩行內容
 LANG="en_US.UTF-8"
 LC_ALL=
[root@centos6-vm01 ~]# source /etc/environment

[root@centos6-vm01 ~]# vim /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
[root@centos6-vm01 ~]# cat /etc/sysconfig/i18n

然后執行下面命令,生成 en_US.UTF-8這個字符集的locale文件
[root@centos6-vm01 ~]# localedef -v -c -i en_US -f UTF-8 en_US.UTF-8

如上操作后,再次ssh登陸后就不會出現這條告警信息了。

如果出現:-bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)

解決辦法
[root@localhost ~]# vim /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"  
LC_ALL="zh_CN.UTF-8"
SYSFONT="latarcyrheb-sun16"

第一行解決了中文亂碼問題
第二行解決了"LC_ALL: cannot change locale (zh_CN.UTF-8)"的問題。

[root@localhost ~]# source /etc/sysconfig/i18n

接着安裝:
[root@localhost ~]# yum install glibc-common kde-l10n-Chinese

安裝之后,重啟服務器,上述問題消失。

注意:不同類型的服務器配置方法會有差異,需要根據實際機器情況,多嘗試一些方法,才能解決問題。

=======================================================================

也有可能是系統中的glibc和locale的庫版本不兼容。
解決辦法刪除locale庫再重建一下,前提是你的文件系統中要有相應的數據文件。

[root@localhost ~]# rm -f /usr/lib/locale/locale-archive
[root@localhost ~]# localedef -i en_US -f ISO-8859-1 -A /usr/share/locale/locale.alias en_US
[root@localhost ~]# localedef -i zh_CN -f GB2312 -A /usr/share/locale/locale.alias zh_CN
[root@localhost ~]# yum -y reinstall glibc-common

======================================================================

再看一個在centos7系統上使用/bin/sh或su命令出現的告警:warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8) ,解決辦法如下(注意:這種方法針對的是centos7,centos6系統不一樣):

[root@uatblockchain04 ~]# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

在物理機上,只要執行:
[root@localhost ~]# yum -y install kde-l10n-Chinese telnet 
[root@localhost ~]# yum -y reinstall glibc-common

還需要修改:
[root@localhost ~]# vim /etc/locale.conf  
LC_ALL="zh_CN.UTF-8"
[root@localhost ~]# source /etc/locale.conf

----------------------------------------------------------------------
注意如果是在在Dockerfile里面執行的時候,就不太一樣了:
必須執行三個步驟才不會出錯   
yum -y install kde-l10n-Chinese telnet && \
yum -y reinstall glibc-common &&\
yum clean all  && \
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8  && \

或加上 
cat /dev/null > /etc/locale.conf && echo "LC_ALL=\"zh_CN.UTF-8\"" > /etc/locale.conf

這樣才可以保證中文不會有問題。

其中碰到一個情況:在基礎鏡像的再安裝軟件的時候再次碰到這個異常提示

最后的處理方案是:dockerfile構建過程執行警告的地方后,再執行一次  
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM