centos7 中文问题和自启动脚本


中文乱码问题

默认的docker中的centos并不支持中文,而且我谷歌了一大堆,默认的方法都没啥用,最后终于找到解决办法,所以在这里记录下。

[highlight lanaguage=”bash”]

#先判断是否下载了中文编码(看下有没有zn_CH开头的)
locale -a
######如果是下面这样说明不支持中文
[root@f6179ac439f2 /]# locale -a
C
POSIX
en_US.utf8
######
#安装语言包
yum install kde-l10n-Chinese -y
#更新gitbc包(防止镜像阉割了该包的部分功能)
yum reinstall glibc-common -y
#设置系统语言包
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
#在/etc/profile/中新加 
export LC_ALL="zh_CN.UTF-8"
export LANG="zh_CN.UTF-8"
#环境生效(这一步可能出错,不过我们可以不管它)
source /etc/profile
#设置一下/etc/locale.conf,在里面加上
LANG="zh_CN.UTF-8"
#然后自己重启下容器,在进来,如果发现还是没用,在更新一下环境
source /etc/profile

[/highlight]

 

开机自启动脚本

我自己到网上查了一下,发现docker是没有什么开机和关机的概念的,所以我写在这里没用,不过还是在这里写一下把,以后或许用的着。

开启自启某项服务

centos中开机自启某项服务非常方便,只需要下面两个命令就可以了

[highlight lanaguage=”bash”]

systemctl enable jenkins.service #设置jenkins服务为自启动服务
sysstemctl start  jenkins.service #启动jenkins服务

[/highlight]

开机自启脚本

首先我们先写好脚本

注意:description必须要写,要不然无法加到自启列表里面

[highlight lanaguage=”bash”]

#!/bin/bash
#description:开机自启脚本
/usr/local/tomcat/bin/startup.sh  #启动tomcat

[/highlight]

 

方法1

[highlight lanaguage=”bash”]

#赋予脚本可执行权限(/opt/script/autostart.sh是你的脚本路径)
chmod +x /opt/script/autostart.sh

#打开/etc/rc.d/rc.local或/etc/rc.local文件,在末尾增加如下内容
su - user -c ‘/opt/script/autostart.sh’

#在centos7中,/etc/rc.d/rc.local的权限被降低了,所以需要执行如下命令赋予其可执行权限
chmod +x /etc/rc.d/rc.local

[/highlight]

方法2

[highlight lanaguage=”bash”]

#将脚本移动到/etc/rc.d/init.d目录下
mv  /opt/script/autostart.sh /etc/rc.d/init.d

#增加脚本的可执行权限
chmod +x  /etc/rc.d/init.d/autostart.sh

#添加脚本到开机自动启动项目中
cd /etc/rc.d/init.d
chkconfig –add autostart.sh
chkconfig autostart.sh on

[/highlight]

自定义服务

1.写服务文件
[Unit]:服务的说明 Description:描述服务 After:描述服务类别

[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install]服务安装的相关设置,可设置为多用户

示例:nginx.service

[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

redis.service

[Unit]
Description=Redis
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=kill -INT cat /tmp/redis.pid
User=www
Group=www

[Install]
WantedBy=multi-user.target


[highlight lanaguage=”bash”]

#保存服务(754权限,在下面这个文件夹里)
/usr/lib/systemd/system 
#设置开机自启
systemctl enable nginx.service 

#其他命令
#启动服务
systemctl start nginx.service
#设置开机自启动
systemctl enable nginx.service
#停止开启自启
systemctl disable nginx.service
#查看服务状态
systemctl status nginx.service
#重启服务
systemctl restart nginx.service
#查看所有已经启动的服务
systemctl list-units --type=service

[/highlight]

 

docker自启动执行脚本

docker比较特殊,我们可以使用下面的方法。

[highlight lanaguage=”bash”]

#用下面的命令打开一个容器就可以了
docker run -d -it  -p 8889:8889  bcde81929337  /bin/bash -c "bash -i /root/notebook/autorun.sh;/bin/bash"
#-c 参数就是容器启动时要执行的命令。后面 /bin/bash的作用就是让容器一直保持运行状态
#bash -i的命令是以交互式指令执行,我们这里不加-i的话就无法使conda生效
#bash后面跟的是容器内的自启动脚本,自己提前在容器里面写好久可以了

[/highlight]

当然还有一种方法:通过DockerFile重新构建镜像,指定启动运行的服务

我们需要自己新建一个dockerfile,然后写下面的命令

[highlight lanaguage=”bash”]

FROM centos

MAINTAINER Johnnian<johnnian@126.com>

RUN <填写构建Docker时需要运行的命令>

ENV  MYENV /XX/XX

CMD <容器每次启动时运行的命令, 只能有一个CMD>

[/highlight]

自己打包镜像的时候输入下面的命令

[block]

docker build -t 镜像名:标签 <Dockerfile所在的目录>

[/block]

 

 

 


文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录