linux7网络服务启停,CentOS 7 使用 systemctl 配置管理服务启停

我司的服务器基本都是 CentOS 7.x 系统,通过系统源安装的服务一般都可以通过 systemctl start XXX.service 命令来一键启动服务,但有一些组件因为种种不可抗因素只能通过解压tar包的方式安装到服务器,每次启动都需要到组件目录下执行特定的命令,管理起来十分不方便。可以自行编写 systemctl 配置文件来实现一键启停服务的效果。操作系统:CentOS 7

systemctl 的配置脚本在服务器的 /usr/lib/systemd 目录下,其中 system 子目录里面的是系统服务,不依赖用户登录即可运行,user 子目录下的用户服务则需要用户登录后方可运行。

其中 .service 为普通的服务, .target为开机启动级别的服务。[root@v130 systemd]# ll /usr/lib/systemd/system

total 1328

-rw-r--r--. 1 root root 275 Apr 27 2018 abrt-ccpp.service

-rw-r--r--. 1 root root 380 Apr 27 2018 abrtd.service

-rw-r--r--. 1 root root 361 Apr 27 2018 abrt-oops.service

-rw-r--r--. 1 root root 266 Apr 27 2018 abrt-pstoreoops.service

-rw-r--r--. 1 root root 262 Apr 27 2018 abrt-vmcore.service

......

[root@v130 systemd]# ll /usr/lib/systemd/user

total 24

-rw-r--r-- 1 root root 131 Nov 3 2018 at-spi-dbus-bus.service

-rw-r--r-- 1 root root 457 Mar 18 2020 basic.target

lrwxrwxrwx 1 root root 26 Apr 13 17:11 bluetooth.target -> ../system/bluetooth.target

-rw-r--r-- 1 root root 414 Mar 18 2020 default.target

-rw-r--r-- 1 root root 499 Mar 18 2020 exit.target

-rw-r--r-- 1 root root 147 Nov 3 2018 glib-pacrunner.service

......

配置文件中包含Unit(服务说明)、Install(安装配置)、Service(服务核心配置)三大模块。以 mysqld.service 服务为例,其官方配置脚本如下:#

# systemd service file for MySQL forking server

#

[Unit]

Description=MySQL Server #服务描述说明

Documentation=man:mysqld(8) #文档相关

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target #服务类别,表示本服务需要在network服务启动后在启动

After=syslog.target

[Install]

WantedBy=multi-user.target #支持多用户

[Service]

User=mysql #服务运行的用户

Group=mysql #服务运行的用户组

Type=forking #后台运行模式

PIDFile=/var/run/mysqld/mysqld.pid #存放PID的路径(绝对)

# Disable service start and stop timeout logic of systemd for mysqld service.

TimeoutSec=0 #启停服务超时时间

# Execute pre and post scripts as root

PermissionsStartOnly=true #是否使用root用户执行前置后置命令

# Needed to create system tables

ExecStartPre=/usr/bin/mysqld_pre_systemd #启动服务前执行的前置命令

# Start main service

#启动服务的命令

ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS

# Use this to switch malloc implementation

EnvironmentFile=-/etc/sysconfig/mysql #环境配置文件路径

# Sets open_files_limit

LimitNOFILE = 5000

Restart=on-failure #重启方式,非正常退出时重启

RestartPreventExitStatus=1

PrivateTmp=false

重点介绍主要的配置说明:[Service]

Type 后台运行模式

simple 默认值,立即启动,当前进程即为主进程

forking 服务将以fork()方式启动,启动后父进程可关闭,子进程作为守护进程运行,建议一般使用此方式

oneshot 执行命令完毕后即结束

notify 执行启动完毕后发出通知信号,其他服务才继续启动

dbus 等待DBus信号后启动

idle 等待其他任务执行完后启动

ExecStart 服务启动命令

ExecStartPre 服务启动前命令

ExecStartPost 服务启动后命令

ExecReload 服务重启命令

ExecStop 服务停止命令

ExecStopPost 服务停止后命令

PrivateTmp 为服务分配独立的临时空间,True/False

PIDFile 指定存放进程PID的路径,用于追踪进程号

Environment 环境变量,使用方式:Environment=DATA_DIR=/opt/data

EnvironmentFile 指定配置文件

KillMode 停止服务的方式

control-group 默认值,杀掉当前控制组所有进程

process 只杀掉主进程

mixed 发送sigterm终止信号给主进程,发送sigkill无条件终止信号给子进程

none 不主动杀任何进程,只执行ExecStop命令

Restart 自动重启服务的方式

no 默认值,退出后不主动重启

on-success 正常退出(退出状态码为0)才重启

on-failure 非正常退出就重启,包括信号终止、超时,守护进程推荐该方式

on-abnormal 信号终止或超时才重启

on-abort 没收到信号或信号终止才重启

on-watchdog 超时才重启

always 任意退出均会重启

RestartSec 重启后等待的秒数

[Install]

WantedBy

multi-user.target 多用户命令行状态,推荐设置

graphical.target 图形界面,依赖于multi-user.target

[Unit]

Before 指定本服务需要在某服务启动前启动

After 指定启动本服务前需先启动某服务

注意:Exec*** 的命令,仅接受指令 参数 参数..格式,不能接受<>|&等特殊字符,很多bash语法也不支持,如果想要支持bash语法,需要设置Type=oneshot

以Consul为例,创建一个consul.service配置:vi /usr/lib/systemd/system/consul.service[Unit]

Description=Consul Service

After=network.target

After=syslog.target

[Service]

User=consul

Type=simple

PIDFile=/var/run/consul/consul.pid

TimeoutSec=5

ExecStart=/home/consul agent -server -ui -bootstrap-expect=1 -data-dir=/consuldata -node=v130 -bind=10.0.4.16 -client=0.0.0.0 -dns-port=8640 -http-port=8530 -serf-lan-port=8331 -serf-wan-port=8332 -server-port=8330

Restart=on-failure

PrivateTmp=true

[Install]

WantedBy=multi-user.target

配置完毕后,给该配置文件赋予754以上权限,并执行systemctl daemon-reload刷新系统配置。[root@v130 ~]# chmod 754 /usr/lib/systemd/system/consul.service

[root@v130 ~]# systemctl daemon-reload

[root@v130 ~]# systemctl start consul

[root@v130 ~]# systemctl status consul

● consul.service - Consul Service

Loaded: loaded (/usr/lib/systemd/system/consul.service; disabled; vendor preset: disabled)

Active: active (running) since Thu 2020-10-08 19:38:19 CST; 31s ago

Main PID: 20455 (consul)

Tasks: 22

Memory: 15.0M

CGroup: /system.slice/consul.service

└─20455 /home/consul agent -server -ui -bootstrap-expect=1 -data-dir=/consuldata -node=v130 -bind=10.0.4.16 -client=0.0.0.0 -dns-port=8640...

Oct 08 19:38:28 v130 consul[20455]: 2020/10/08 19:38:28 [INFO] raft: Node at 10.0.4.16:8330 [Leader] entering Leader state

Oct 08 19:38:28 v130 consul[20455]: 2020/10/08 19:38:28 [INFO] consul: cluster leadership acquired

Oct 08 19:38:28 v130 consul[20455]: 2020/10/08 19:38:28 [INFO] consul: New leader elected: v130

Oct 08 19:38:48 v130 consul[20455]: ==> Newer Consul version available: 1.8.4 (currently running: 1.4.3)

如无意外,则可看到consul服务已经稳稳的运行起来了,systemctl status命令可查看服务的状态。# systemctl status的参数说明:

Loaded 服务.service配置文件所在位置

Active 当前运行状态

loaded 初始化完成

active(running) 服务正常运行中

active(exited) 执行过一次命令就结束,目前没有在执行

active(waiting) 执行中,等待其他事件服务完成

inactive 服务关闭

enabled 服务开机自启

disabled 服务开机不自启

static 服务开机启动项不可用

failed 配置错误

Main PID 主进程ID

Memory 占用内存大小

CGroup 所有进程详情

最后,整理一波关于systemctl的一些常用命令。start 启动

stop 停止

status 运行状态

restart 重启

reload 重载服务,用于更新配置

enable 设置开机自启动

disable 取消开机自启动

is-enabled 开机自启动状态

daemon-reload 重载systemd,用于新增服务

list-units --type=service 已启动的服务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值