新手到站长的必经之路(三)—— 服务器上的文件结构

前言

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

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.servicesystemd-user-sessions.servicetime-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 表示该服务所在的 Targetmulti-user.target, 表示多用户命令行状态。一般都会默认启动这个组里的所有服务。

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

2.3 服务启停命令管理 systemctl

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

任务旧指令新指令
使某服务自动启动chkconfig --level 3 httpd onsystemctl enable httpd.service
使某服务不自动启动chkconfig --level 3 httpd offsystemctl disable httpd.service
检查服务状态service httpd statussystemctl status crond.service (服务详细信息)
systemctl is-active crond.service (仅显示是否 Active)
显示所有已启动的服务chkconfig --listsystemctl list-units --type=service
启动某服务service httpd startsystemctl start httpd.service
停止某服务service httpd stopsystemctl stop httpd.service
重启某服务service httpd restartsystemctl restart httpd.service

参考:

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

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 #设置防火墙开机启动

参考:CentOS7下配置 iptables

4. 总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值