Systemd 添加自定义服务(开机自启动)
Systemd 简介:https://fedoraproject.org/wiki/Systemd/zh-cn
一、service unit 常用命令,以 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() man:sshd_config()
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:许多软件都有自己的环境参数文件,该字段指定文件路径
注意:/etc/profile 或者 /etc/profile.d/ 这些文件中配置的环境变量仅对通过 pam 登录的用户生效,而 systemd 是不读这些配置的。
systemd 是所有进程的父进程或祖先进程,它的环境变量会被所有的子进程所继承,如果需要给 systemd 配置默认参数可以在 /etc/systemd/system.conf 和 /etc/systemd/user.conf 中设置。
加载优先级 system.conf 最低,可能会被其他的覆盖。 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=描述
Environment=环境变量或参数(系统环境变量此时无法使用)
After=network.target [Service]
Type=forking
EnvironmentFile=所需环境变量文件或参数文件
ExecStart=启动命令(需指定全路径)
ExecStop=停止命令(需指定全路径)
User=以什么用户执行命令 [Install]
WantedBy=multi-user.target
新建完成后设置自启动
# 添加或修改配置文件后,需要重新加载
systemctl daemon-reload # 设置自启动,实质就是在 /etc/systemd/system/multi-user.target.wants/ 添加服务文件的链接
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
Systemd 添加自定义服务(开机自启动)的更多相关文章
- linux 服务开机自启动systemd方式 (Centos7)
linux 服务开机自启动systemd方式 (Centos7) 1.编写一个 /opt/hello.sh 脚本 [root@jws-ftp prometheus]# cat /opt/hello.s ...
- 如何把一个c语言程序做成windows服务开机自启动
原文:如何把一个c语言程序做成windows服务开机自启动 目前写的程序是一个用c语言实现socket侦听的,那么如何把这个程序做成开机自启动呢? 我们是通过vs6.0,编译后生成了.exe文件,然后 ...
- Linux(centos7)设置docker服务开机自启动以及容器自启动
docker服务开机自启动 systemctl enable docker 设置容器自启动 可以在运行的时候通过设置--restart 参数 docker run --restart always - ...
- Linux服务开机自启动使用示例
本文以redis服务为例,介绍了两种服务自启动的方法service,systemctl使用示例 1.修改redis.conf,允许后台运行 daemonize no 改为 daemonize yes ...
- Linux服务开机自启动设置
Linux中也有类似于Window中的开机自启动服务,主要是通过chkconfig命令来设置.它主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服 ...
- 用DOS命令配置服务开机自启动
2016-08-19 15:01 Create 使用命令 sc config 参考博客:http://blog.csdn.net/it1988888/article/details/7992626 ...
- 设置redis服务开机自启动
今天周一,一大早来公司开完会,就听到开发的同学说本地项目起不来了,叫我查下原因.想了下,他们本地项目只跟我们公司的一台内网服务器有关,那台服务器他们要用到的呢,也就只有mysql和redis这两个服务 ...
- Linux(Debian) 上安装tomcat并注册服务开机自启动
1.准备工作 a.下载tomcat linux的包,地址:http://tomcat.apache.org/download-80.cgi,我们下载的版本是8.0,下载方式如图: b ...
- windows server 2008R2 配置tomcat服务开机自启动
一.配置环境 操作系统:Windows server 2008 R2 软件包:jdk_1.7.rar 二.安装操作 1,右击解压jdk_1.7.rar:解压后双击运行jdk-7u79-windows- ...
随机推荐
- linux-shell系列2-机器巡检
#!/bin/bash#主机信息每日巡检NETWORK=`ip a|grep 2:|awk -F':' '{print $2}'` IPADDR=$(ifconfig $NETWORK|grep 'i ...
- MySql 主从同步 (库名不同)
主库:192.168.1.250 从库:192.168.1.199 主库 my.ini # For advice on how to change settings please see # htt ...
- [踩过的坑]Elasticsearch.Net 官网示例的坑
经过昨天的ElasticSearch 安装,服务以及可以启动了,接下来就可以开发了,找到了官网提供的API以及示例,Es 官方提供的.net 客户端有两个版本一个低级版本: [Elasticsearc ...
- HDU4624 Endless Spin 【最大最小反演】【期望DP】
题目分析: 题目是求$E(MAX_{i=1}^n(ai))$, 它等于$E(\sum_{s \subset S}{(-1)^{|s|-1}*min(s))} = \sum_{s \subset S}{ ...
- Codeforces543 B. Destroying Roads
传送门:>Here< 题意:给出一张无向图(边权为1),并给出两对起点和终点以及距离:s1,t1,l1; s2,t2,l2; 要求删除尽量多的边,使得dis(s1,t1)<=l1, ...
- 【BZOJ3215/3216】[ZJOI2013]话旧/话旧2(组合数学,动态规划)
[BZOJ3215/3216][ZJOI2013]话旧/话旧2(组合数学,动态规划) 题面 BZOJ3215 BZOJ3216 题解 先解决\(3216\),求的是最小值为\(0\). 因为起点就是\ ...
- 【BZOJ2870】最长道路(边分治)
[BZOJ2870]最长道路(边分治) 题面 BZOJ权限题 Description H城很大,有N个路口(从1到N编号),路口之间有N-1边,使得任意两个路口都能互相到达,这些道路的长度我们视作一样 ...
- Nifi flow 备份恢复
1. 备份 copy 下面的文件到本地: conf/flow.xml.gz 2. 恢复 新安装一个nifi的环境,把这个文件copy到conf文件夹下 运行nifi, 在界面上create ...
- C++ 中 const、volatile、mutable的用法
@2019-01-14 [小记] C++中const.volatile.mutable的用法
- 【redis】redis配置文件参数解析
redis配置文件路径可以通过info命令找到 Redis配置参数如下daemonize no 默认情况下,redis不是以守护进程的方式运行,一般生产环境,把该项的值更改为 yesrequirepa ...