systemctl

 

centos6

centos7

启动

service NAME start

systemctl start NAME[.service]

停止

service NAME stop

systemctl stop NAME[.service]

重启

service NAME restart

systemctl restart NAME[.service]

重载

server NAME reload

systemctl reload NAME[.service]

状态

service NAME status

systemctl status NAME[.service]

条件式重启(启动重启,不启动不重启)

service NAME condrestart

systemctl try-restart NAME[.service]

查看某服务当前状态

 

systemctl is-active NAME[.service]

查看所有已经激活的服务[所有]

 

systemctl list-units –type service [--all]

设定开机启动

chkconfig NAME on

systemctl enable NAME[.service]

禁止开机启动

chkconfig NAME off

systemctl disable NAME[.service]

查看所有开机启动

chkconfig --list

systemctl list-unit-files –type service

查看某服务是否开机紫气

 

systemctl is-enabled NAME[.service]

查看运行级别

runlevel

systemctl list-units –type target

查看默认运行级别

/etc/inittab

systemctl get-default

修改默认级别

 

systemctl set-default NAME.target

切换至紧急救援模式

 

systemctl rescue

 

 

使用systemctl管理服务

在/usr/lib/systemd/system/目录下创建xxx.service名字的文件。创建完成后systemctl daemon-daload

使用systemctl enable 服务的时候会在/etc/systemd/system目录下创建快捷方式,指向/usr/lib/systemd/system/的脚本

文件中的内容(命令必须为绝对路径)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
[Unit]   #启动顺序与依赖关系
Description=当前服务的描述信息
Documentation=当前服务的文档信息
After=network.target #设定当前服务应该在那些服务启动后才启动,只涉及启动顺序,没有依赖
#Before=   设置当前服务应该在哪个服务之前启动
#Wants=  希望和哪个服务同时运行,弱依赖
#Requires= 必须和哪个服务同时运行,强依赖,如果那个服务停止,当前服务退出
 
[Service]   #启动行为,*****命令都为绝对路径******
EnvironmentFile=-/etc/sysconfig/sshd  #指定当前服务的环境参数文件。
#该文件内部的key=value键值对,可以用$key的形式,在当前配置文件中获取。
#-代表若果该配置文件没有,也不会报错
 
PIDFile=/usr/local/xxx.pid  #指定PID文件位置,后面可以根据这个PID做重启和停止动作
 
ExecStart=/usr/sbin/sshd -D $OPTIONS  定义启动进程时执行的命令。$OPTIONS就来自EnvironmentFile字段指定的环境参数文件。
 
ExecReload=/bin/kill -HUP $MAINPID    #重启服务
ExecStop=/bin/kill -s QUIT $MAINPID   #停止服务
ExecStartPost=/usr/bin/sleep 1   
#有时候systemd会在服务启动之前,还没来得及创建PID文件就结束,
#这会导致systemd找不到该服务的PID文件,无法做管控,这里睡上一秒保证systemd能找到这个PID文件
 
#ExecReload字段:重启服务时执行的命令
#ExecStop字段:停止服务时执行的命令
#ExecStartPre字段:启动服务之前执行的命令
#ExecStartPost字段:启动服务之后执行的命令
#ExecStopPost字段:停止服务之后执行的命令
 
Type=simple   #启动类型
#simple(默认值):ExecStart字段启动的进程为主进程
#forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
#下面不常用
#oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
#dbus:类似于simple,但会等待 D-Bus 信号后启动
#notify:类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务
#idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
#工作目录
WorkingDirectory=/data/portal/
KillMode=process    #重启行为
#control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
#process:只杀主进程,很少用,ssh是这个
#mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
#none:没有进程会被杀掉,只是执行服务的 stop 命令。
 
Restart=on-failure  #失败时的重启策略
#no(默认值):退出后不会重启
#on-success:只有正常退出时(退出状态码为0),才会重启
#on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
#on-abnormal:只有被信号终止和超时,才会重启
#on-abort:只有在收到没有捕捉到的信号终止时,才会重启
#on-watchdog:超时退出,才会重启
#always:不管是什么退出原因,总是重启
 
RestartSec=1s  #systemd重启服务前需要等待的时间
 
#打开文件限制
LimitNOFILE=655360
LimitNPROC=655360
 
#解除内存限制
LimitMEMLOCK=infinity
 
 
[Install]  #开机自动启动
WantedBy=multi-user.target    #多用户模式
#使用systemctl enable xxxx的时候会自动在这个target模式下创建个链接指向该配置文件
#Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
#WantedBy=graphical.target    #图形用户模式 

  

prometheus启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=prometheus
Documentation=prometheus.io
After=network.target
 
[Service]
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
Type=simple
Restart=on-failure
 
[Install]
WantedBy=multi-user.target               

  

elasticsearch启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=elasticsearch
 
[Service]
User=es
LimitNOFILE=655360
LimitNPROC=655360
LimitMEMLOCK=infinity
ExecStart=/data/elasticsearch/bin/elasticsearch
 
[Install]
WantedBy=multi-user.target

  

 jar包做成systemd方式

1.先配置jar的启动脚本,目录在/data/gateway下

1
2
[centos@gateway]$ cat start-gateway.sh
/usr/local/java/bin/java -Xms500m -Xmx500m -jar /data/gateway/gateway.jar --spring.application.name=gateway --spring.profiles.active=product > /data/gateway/gateway.log

2.再配置jar的service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[centos@gateway]$ cat /etc/systemd/system/gateway.service
[Unit]
Description=gateway
Documentation=http://www.xxx.com
After=network.target
 
[Service]
User=developer
Group=developer
WorkingDirectory=/data/gateway/
ExecStart=/bin/bash /data/gateway/start-gateway.sh
Type=simple
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

 

强依赖型:生产实例

  emqx需要使用mysql插件进行认证,所以在开机的时候emqx就需要自行启动连接mysql,但是当emqx无法连接mysql时并不会导致emqx停止,仅仅是停掉了这个插件,这会影响到后续所有业务,所以需要在emqx的服务文件中加入强依赖和启动顺序

1
2
3
4
[Unit]
Description=emqx
After=mysqld.service
Requires=mysqld.service

  加上after和requires之后的情况

  • mysql没有启动: emqx会主动拉起mysql服务,在mysql服务启动完成之后在启动emqx
  • mysql已经启动: emqx正常启动
  • mysql启动失败: emqx因为依赖关系,启动失败

额外事项:

  需要nacos提前启动的服务,比如jar包做成的服务,可以不添加强依赖,因为jar无法连接到配置文件会直接重启,不像emqx连不到mysql仅仅停掉一个插件.

 

 

  

posted @   ForLivetoLearn  阅读(422)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示