前言:

Centos7开机第一个程序从init完全换成了systemd的启动方式。而systemd是通过管理unit的方式来控制开机服务,开机级别等功能。

在/usr/lib/systemd/system目录下包含了各种unit文件,其中就包括了以service后缀的unit,systemd在开机要想执行自启动服务,必须通过.service后缀的unit来进行控制的。

两种服务:

One、系统服务:开机不用登陆就能运行的程序[开机自启]。

Two、用户服务:需要登陆以后才能运行的程序。

1、 配置文件简单介绍:

sshd.service为例




centos7 开机启动seata centos7 sshd开机启动_centos7 开机启动seata


1、[Unit] 区块:启动顺序与依赖关系。

字段解释:

Description字段:给出当前服务的简单描述。

Documentation字段:给出文档位置。

After字段:如果network.target或sshd-keygen.service需要启动,那么sshd.service应该在它们之后启动。

Before字段:定义sshd.service应该在哪些服务之前启动。

注意:After和Before字段只涉及启动顺序,不涉及依赖关系。

2、[Service]区块:启动行为。

启动命令:

ExecStart字段:定义启动进程时执行的命令。

ExecReload字段:重启服务时执行的命令。

ExecStop字段:停止服务时执行的命令。

ExecStartPre字段:启动服务之前执行的命令。

ExecStartPost字段:启动服务之后执行的命令。

ExecStopPost字段:停止服务之后执行的命令。

注意两点:

One、所有的启动设置之前,可以加上一个连词号[-],表示"抑制错误",即发生错误的时候,不影响其他命令的执行。

如下:

EnvironmentFile=-/etc/sysconfig/sshd,表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。

Two、[Service]中的启动、重启、停止命令全部要求使用绝对路径!

启动类型:

Type字段定义启动类型,值如下:

Simple[默认]:ExecStart字段启动的进程为主进程。

forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程[后台运行]。

oneshot:类似于simple,但只执行一次,Systemd会等它执行完,才启动其他服务。

dbus:类似于simple,但会等待D-Bus信号后启动。

notify:类似于simple,启动结束后会发出通知信号,然后Systemd再启动其他服务。

idle:类似于simple,但是要等到其他任务都执行完,才会启动该服务。

PrivateTmp=True表示给服务分配独立的临时空间。

重启行为:

KillMode字段:定义 Systemd如何停止sshd服务。

control-group[默认值]:当前控制组里面的所有子进程,都会被杀掉。

process:只杀主进程。

mixed:主进程将收到SIGTERM信号,子进程收到SIGKILL信号。

none:没有进程会被杀掉,只是执行服务的stop命令。

Restart字段:定义了sshd退出后,Systemd的重启方式

Restart字段的值:

no[默认值]:退出后不会重启。

on-success:只有正常退出时[退出状态码为0],才会重启。

on-failure:非正常退出时[退出状态码非0],包括被信号终止和超时,才会重启。

on-abnormal:只有被信号终止和超时,才会重启。

on-abort:只有在收到没有捕捉到的信号终止时,才会重启。

on-watchdog:超时退出,才会重启。

always:不管是什么退出原因,总是重启。

RestartSec字段:表示 Systemd 重启服务之前,需要等待的秒数。

注意:

对于守护进程,推荐设为on-failure。

对于那些允许发生错误退出的服务,可以设为on-abnormal。

3、[Install] 区块:定义如何安装这个配置文件,即怎样做到开机启动。

WantedBy字段:表示该服务所在的Target。

Target的含义是服务组,表示一组服务。

WantedBy=multi-user.target指的是:sshd所在的Target是multi-user.target。

注意:

这个设置非常重要,因为执行systemctl enable sshd.service命令时,sshd.service的一个符号链接,就会放在/etc/systemd/system目录下面的multi-user.target.wants子目录之中。

Systemd有默认的启动 Target。

2、 测试

以tomcat为例

sudo vim /usr/lib/systemd/system/tomcat.service

写入如下:

[Unit]
Description=my tomcat service
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment="JAVA_HOME=/root/General/jdk1.8.0_181"
PIDFile=/home/odysee/General/tomcat8.5/tomcat.pid
ExecStart=/home/odysee/General/tomcat8.5/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target


centos7 开机启动seata centos7 sshd开机启动_重启tomcat_02


创建上面服务需要的pid

vim /home/odysee/General/tomcat8.5/bin/catalina.sh

加入如下:

CATALINA_PID="$CATALINA_BASE/tomcat.pid"


centos7 开机启动seata centos7 sshd开机启动_tomcat_03


3、 设置为开机启动/禁止

sudo systemctl enable/disable tomcat.service


centos7 开机启动seata centos7 sshd开机启动_centos7 开机启动seata_04


启动tomcat

sudo systemctl start tomcat.service

查看状态

systemctl status tomcat.service


centos7 开机启动seata centos7 sshd开机启动_tomcat_05


停止tomcat

sudo systemctl stop tomcat.service


centos7 开机启动seata centos7 sshd开机启动_centos7 tomcat_06


4、重启OS

init 6


centos7 开机启动seata centos7 sshd开机启动_centos7 开机启动seata_07


浏览器访问


centos7 开机启动seata centos7 sshd开机启动_tomcat_08


测试完成

欢迎大家给予宝贵的意见或者建议。

欢迎大家补充或者共享一些其他的方法。

感谢支持。