前言
从无序到有序,从无规律到有规律,我们一直在学习如何总结规律、加强认知,然后简化操作、提升效率。
作为一个服务器上的服务,为了能达到最后的可以一键部署的效果,我们也需要对文件进行分门别类,固定类别含义,方便理解与操作。
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 |
参考:
3. 服务器的防火墙
比如我们安装一个 sshd 服务,需要访问端口时,常会发现都配置好了,服务也正常启动,但是就是连不上远程。这里有一个原因,可能是我们的防火墙配置没有放开端口,允许他人访问。
CentOS 7.x 默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤。
1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
2、安装 iptables
yum -y install iptables-services
3、关闭SElinux:
# 在CentOS7 下由于SELINUX的开启会导致很多系统服务和驱动不兼容,所以建议大家关闭SELINUX
vi /etc/selinux/config
SELINUX=disabled
:wq
3、iptables防火墙(这里iptables已经安装,下面进行配置)
# 编辑防火墙配置文件
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 #设置防火墙开机启动
4. 总结
知其然不知其所以然,故 学而忘、用即丢。
想要记录一点文字,真的很难。幸好这两天不忙,于是重新查阅资料,并且整理。
写文章果然很费时间,又花去了半天时间,坚持很难,放弃却可以一键点击。
希望2020年,我可以坚持更新。