前言

从无序到有序,从无规律到有规律,我们一直在学习如何总结规律、加强认知,然后简化操作、提升效率。
作为一个服务器上的服务,为了能达到最后的可以一键部署的效果,我们也需要对文件进行分门别类,固定类别含义,方便理解与操作。

1. ECS 上安装的操作系统

不同的操作系统,可能拥有的命令不一样,内置的服务也不一致。
我这里用的是 ​​​CentOS 7.3 1611​​​,镜像下载​​地址​​​:​​http://vault.centos.org/7.3.1611/isos/x86_64/​​。

2. 服务的常用结构

##当前服务器安装目录(推荐创建一个新用户)
├── .bashrc ## 环境变量
├── backup ## 数据库备份目录
├── bin ## 服务脚本文件
├── data ## 服务对应数据存储目录
├── etc ## 配置文件目录
├── app ## 服务安装包目录
├── logs ## 日志目录
├── sbin ## 系统级脚本工具
├── share ## 平台依赖库

我们将依赖于第三方的服务放在 ​​share​​​ 目录下,将 自己开发出来的程序 放在 ​​app​​​ 目录下,统一配置好的默认配置文件 放在 ​​etc​​​ 目录下,将程序运行的 日志文件放在 ​​logs​​​ 目录下,将程序运行的 数据文件放在 ​​data​​​ 目录下,将运维脚本(安装、启、停、升级 控制)放在 ​​sbin​​ 目录下。

2. 服务器的自启文件

2.1实现软件自启的方法

对于支持 ​​systemd​​​ 的软件,想要实现开机自启,只需要两步:
1) 在 ​​​/lib/systemd/system/​​​ 目录添加一个配置文件 ​​xxx.service​​​ ,
2) 执行 ​​​systemctl enable xxx​​​ 就可以让该软件 开机启动。
3) 设置之后,服务器不重启,软件就不会自启。若不想重启服务,而使用软件。执行 ​​​systemctl start xxx​​ 来启动。

2.2 ​​xxx.service​​ 的内容是什么?

我们先分析一下 现有的 ​​xxx.service​​​ 文件, 理解了格式之后,就可以照猫画虎,给自己的软件也写一个自启服务了。
例如 crond.service

# crond.service脚本内容如下
[root@localhost ~]# cat /usr/lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target
  • [Unit] 启动顺序与依赖关系
  • ​Description​​ 字段给出当前服务的简单描述
  • ​After​​​ 字段:表示如果​​auditd.service​​​或​​systemd-user-sessions.service​​​ 或​​time-sync.target​​ 需要启动,需要先启动 crond 服务
  • ​Before​​​ 字段: 定义​​crond.service​​应该在哪些服务之前启动
  • [Service] 启动行为
  • ​EnvironmentFile​​字段:指定当前服务的环境参数文件。
  • ​ExecStart​​字段:定义启动进程时执行的命令。
  • ​ExecStop​​字段:停止服务时执行的命令
  • ​ExecReload​​字段:重启服务时执行的命令
  • ​ExecStartPre​​字段:启动服务之前执行的命令
  • ​ExecStopPost​​字段:停止服务之后执行的命令
  • ​KillMode​​字段:定义 Systemd 如何停止 crond 服务。
  • ​KillMode​​字段可以设置的值如下。
  • ​control-group​​(默认值):当前控制组里面的所有子进程,都会被杀掉
  • ​process​​:只杀主进程
  • ​mixed​​:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
  • ​none​​:没有进程会被杀掉,只是执行服务的 stop 命令。
  • [Install] 定义如何安装这个文件
  • ​WantedBy​​​ 表示该服务所在的​​Target​​​ 是​​multi-user.target​​, 表示多用户命令行状态。一般都会默认启动这个组里的所有服务。

我这里 只写了几个常用的字段描述,根据上述字段分析:
我们只需要 将 [Description] 修改成我们的服务名;[After]、[Before] 看情况,可以不填;[Service] 中的字段改成我们的服务的启停命令,其他字段不变即可。

2.3 服务启停命令管理 systemctl

systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。

任务

旧指令

新指令

使某服务自动启动

chkconfig --level 3 httpd on

systemctl enable httpd.service

使某服务不自动启动

chkconfig --level 3 httpd off

systemctl disable httpd.service

检查服务状态

service httpd status

systemctl status crond.service (服务详细信息)

systemctl is-active crond.service (仅显示是否 Active)

显示所有已启动的服务

chkconfig --list

systemctl list-units --type=service

启动某服务

service httpd start

systemctl start httpd.service

停止某服务

service httpd stop

systemctl stop httpd.service

重启某服务

service httpd restart

systemctl restart httpd.service

参考:

  1. ​Centos7之Systemd(Service文件)详解​
  2. ​系统服务管理工具chkconfig/systemctl​
  3. ​systemctl命令​

3. 服务器的防火墙

比如我们安装一个 sshd 服务,需要访问端口时,常会发现都配置好了,服务也正常启动,但是就是连不上远程。这里有一个原因,可能是我们的防火墙配置没有放开端口,允许他人访问。

CentOS 7.x 使firewalliptables

1firewall
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
2 iptables
yum -y install iptables-services

3SElinux
# 在CentOS7 下由于SELINUX的开启会导致很多系统服务和驱动不兼容,所以建议大家关闭SELINUX
vi /etc/selinux/config
SELINUX=disabled
:wq


3iptablesiptables
# 编辑防火墙配置文件
vi /etc/sysconfig/iptables

# sampleconfiguration for iptables service
# you can edit thismanually or use system-config-firewall
# please do not askus to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT[0:0]
:OUTPUT ACCEPT[0:0]
-A INPUT -m state--state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -jACCEPT
-A INPUT -i lo -jACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
-A INPUT -j REJECT--reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq! #保存退出

# 备注:这里指可以访问 22/80/8080 端口。

systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

参考:​​CentOS7下配置 iptables​

4. 总结

知其然不知其所以然,故 学而忘、用即丢。
想要记录一点文字,真的很难。幸好这两天不忙,于是重新查阅资料,并且整理。
写文章果然很费时间,又花去了半天时间,坚持很难,放弃却可以一键点击。
希望2020年,我可以坚持更新。