前言
从无序到有序,从无规律到有规律,我们一直在学习如何总结规律、加强认知,然后简化操作、提升效率。
作为一个服务器上的服务,为了能达到最后的可以一键部署的效果,我们也需要对文件进行分门别类,固定类别含义,方便理解与操作。
1. ECS 上安装的操作系统
不同的操作系统,可能拥有的命令不一样,内置的服务也不一致。
我这里用的是 CentOS 7.3 1611
,镜像下载地址:http://vault.centos.org/7.3.1611/isos/x86_64/。
2. 服务的常用结构
我们将依赖于第三方的服务放在 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
- [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 服务,需要访问端口时,常会发现都配置好了,服务也正常启动,但是就是连不上远程。这里有一个原因,可能是我们的防火墙配置没有放开端口,允许他人访问。
4. 总结
知其然不知其所以然,故 学而忘、用即丢。
想要记录一点文字,真的很难。幸好这两天不忙,于是重新查阅资料,并且整理。
写文章果然很费时间,又花去了半天时间,坚持很难,放弃却可以一键点击。
希望2020年,我可以坚持更新。