Systemd 添加自定义服务(开机自启动)

Systemd 简介:https://fedoraproject.org/wiki/Systemd/zh-cn

一、常用命令,以 mysql 服务为例

# 开机启动
systemctl enable mysqld

# 关闭开机启动
systemctl disable mysqld

# 启动服务
systemctl start mysqld

# 停止服务
systemctl stop mysqld

# 重启服务
systemctl restart mysqld

# 查看服务状态
systemctl status mysqld
systemctl is-active sshd.service

# 结束服务进程(服务无法停止时)
systemctl kill mysqld

二、服务启动的配置文件

配置文件主要放在 /usr/lib/systemd/system 目录,也可能在 /etc/systemd/system 目录

# 查看 sshd 服务启动文件
systemctl cat sshd.service

# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

每个服务文件以 .service 结尾,一般会分为 3 部分,必须包含 [Service] 部分

[Unit]

Description:当前服务的简单描述
Documentation:指定 man 文档位置

After:如果 network.target 或 sshd-keygen.service 需要启动,那么 sshd.service 应该在它们之后启动
Before:定义 sshd 应该在哪些服务之前启动
注意:After 和 Before 字段只涉及启动顺序,不涉及依赖关系。

Wants:表示 sshd.service 与 sshd-keygen.service 之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响 sshd.service 继续执行
Requires:表示"强依赖"关系,即如果该服务启动失败或异常退出,那么sshd.service 也必须退出
注意:Wants 字段与 Requires 字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动。

[Service]

EnvironmentFile:许多软件都有自己的环境参数文件,该文件可以用字段读取

Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle
simple(设置了 ExecStart= 但未设置 BusName= 时的默认值):ExecStart 字段启动的进程为该服务的主进程
forking:ExecStart 字段将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程

ExecStart:定义启动进程时执行的命令
上面的例子中,启动sshd,执行的命令是/usr/sbin/sshd -D $OPTIONS,其中的变量$OPTIONS就来自EnvironmentFile字段指定的环境参数文件。类似的,还有如下字段
ExecReload:重启服务时执行的命令
ExecStop:停止服务时执行的命令
ExecStartPre:启动服务之前执行的命令
ExecStartPost:启动服务之后执行的命令
ExecStopPost:停止服务之后执行的命令

RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行

KillMode:定义 Systemd 如何停止服务,可以设置的值如下:
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉
process:只杀主进程
mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
none:没有进程会被杀掉,只是执行服务的 stop 命令

Restart:定义了退出后,Systemd 的重启方式。可以设置的值如下:
no(默认值):退出后不会重启
on-success:只有正常退出时(退出状态码为0),才会重启
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
on-abnormal:只有被信号终止和超时,才会重启
on-abort:只有在收到没有捕捉到的信号终止时,才会重启
on-watchdog:超时退出,才会重启
always:不管是什么退出原因,总是重启

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

配置中多个相同配置会选择最后一个,下面结果是 execstart2
[Service]
ExecStart=/bin/echo execstart1
ExecStart=/bin/echo execstart2

所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行
EnvironmentFile=-/etc/sysconfig/sshd,表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。

[Install]

WantedBy:表示该服务所在的 Target(服务组)

关于 Target

# 查看默认 Target
systemctl get-default
# 结果为 multi-user.target,表示默认的启动 Target 是multi-user.target。在这个组里的所有服务,都将开机启动。这就是为什么systemctl enable命令能设置开机启动的原因。

# 查看 multi-user.target 包含的所有服务
systemctl list-dependencies multi-user.target

# 切换到另一个 target
# shutdown.target 就是关机状态
# 常用的 Target 有两个:一个是multi-user.target,表示多用户命令行状态;另一个是graphical.target,表示图形用户状态,它依赖于multi-user.target
systemctl isolate shutdown.target

三、自定义服务

在 /usr/lib/systemd/system 下新建服务脚本

vim /usr/lib/systemd/system/zdy.service

[Unit]
Description=描述
After=network.target

[Service]
Type=forking
EnvironmentFile=所需环境变量文件或参数文件
ExecStart=启动命令
ExecStop=停止命令
User=以什么用户执行命令

[Install]
WantedBy=multi-user.target

新建完成后设置自启动

# 添加修改配置文件以后,需要重新加载配置文件
systemctl daemon-reload

# 设置自启动,实质就是在 /usr/lib/systemd/system/nginx.service 添加一个文件的链接
systemctl enable zdy

官方手册 https://www.freedesktop.org/software/systemd/man/systemd.service.html

中文翻译 http://www.jinbuguo.com/systemd/systemd.service.html

http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

https://blog.csdn.net/weixin_37766296/article/details/80192633

原文地址:https://www.cnblogs.com/jhxxb/p/10654554.html

时间: 2024-10-07 02:58:19

Systemd 添加自定义服务(开机自启动)的相关文章

systemd下supervisord服务开机自启动以及注意事项

systemd 下supervisord服务开机自启动 centos7 开机自启动脚本: #vim /lib/systemd/system/supervisord.service # supervisord service for sysstemd (CentOS 7.0+) # by ET-CS (https://github.com/ET-CS) [Unit] Description=Supervisor daemon [Service] ExecStart=/usr/bin/supervi

mysql_windows_安装版添加到服务开机自启动

不解释 ,cmd下直接运行 sc create mysql binPath= "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" start= auto mysql_windows_安装版添加到服务开机自启动,布布扣,bubuko.com

oracle服务开机自启动

1.修改oracle系统配置文件::/etc/oratab vi /etc/oratab orcl:/opt/oracle/product/10.2.0/db_1:Y 2.在 /etc/init.d/ 下创建文件oracle启动脚本,内容如下: #!/bin/sh # chkconfig: 35 80 10 # description: Oracle auto start-stop script. # # Set ORA_HOME to be equivalent to the $ORACLE_

如何把一个c语言程序做成windows服务开机自启动

原文:如何把一个c语言程序做成windows服务开机自启动 目前写的程序是一个用c语言实现socket侦听的,那么如何把这个程序做成开机自启动呢? 我们是通过vs6.0,编译后生成了.exe文件,然后对这个exe文件进行开机自启动设置.具体设置步骤如下: 第一,注册服务名称. (1)下载Instsrv.exe和srvany.exe两个文件.并将其拷贝到C:\WINDOWS文件夹下. (2)执行命令.C:\WINDOWS>instsrv hope c:\WINDOWS\srvany.exe 这里,

Windows下安装的XAMPP如何设置Apache和MySQL等服务开机自启动

在Windows上安装完Xampp,每次都要到Xampp控制台启动和关闭Apache和MySQL等服务,但可以通过设置让Apache等服务安装为系统服务,从而实现服务开机自启动.1.在Xampp安装目录下找到xampp-control.exe,鼠标右键,选择"以管理员身份运行":2.打开控制面板后,我们点击其中一个服务前面红色的叉(确保该服务时停止状态,运行状态下无法完成操作),例如MySQL,会弹出一个对话框,如下图所示:3.回到Xampp的控制面板,发现红色的叉已经变成绿色的勾,如

Centos6.8下设置gitlab服务开机自启动,关闭防火墙开机自启动

一. 本地虚拟机的缺点 本地虚拟机虽然也可以模拟服务器用,但电脑不能保证24小时都是开机的,一旦关机,服务就失去了连接,你将看到我们之前搭建的gitlab服务出现如下画面: 本地电脑7*24小时不关机是不现实的,但是可以保证,一旦虚拟机启动,服务也响应启动,而不是服务启动了,发现防火墙开机自启了,本地去访问gitlab时被拦截了,当关闭防火墙,又发现gitlab服务不是开机自动启动的,还需要手动敲一遍命令: gitlab-ctl start 这显然是不合理的,下面我们谈谈如何开闭防火墙开机自启动

Linux服务开机自启动使用示例

本文以redis服务为例,介绍了两种服务自启动的方法service,systemctl使用示例 1.修改redis.conf,允许后台运行 daemonize no 改为 daemonize yes 2.使用service命令 1)编写启动shell脚本,命名为redis redis文件代码如下: #!/bin/sh #Configurations injected by install_server below.... EXEC=/home/shijingjing/redis-4.0.2/sr

用DOS命令配置服务开机自启动

2016-08-19 15:01 Create 使用命令  sc  config 描述: 在注册表和服务数据库中修改服务项.用法: sc <server> config [service name] <option1> <option2>... 选项:注意: 选项名称包括等号. 等号和值之间需要一个空格.这点尤其重要 type= <own|share|interact|kernel|filesys|rec|adapt> start= <boot|sys

Linux(Debian) 上安装tomcat并注册服务开机自启动

1.准备工作 a.下载tomcat linux的包,地址:http://tomcat.apache.org/download-80.cgi,我们下载的版本是8.0,下载方式如图:        b.因为tomcat的安装依赖于Java jdk,所以我们需要在判断linux系统下面是否安装jdk b.1 使用(Xshell)连接到Linux系统下面 b.2 输入命令:java -version,如果显示jdk版本号,则证明已经安装,如果不显示,则证明没有安装,如果没有安装,请参考下面地址进行安装: