创建ping@.service文件,内容可以如下:
[Unit]
Description=ping daemon
After=network.target
[Service]
Restart=on-failure
ExecStart=/usr/bin/ping 127.0.0.%d
ExecReload=/bin/kill -s -HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
KillMode=none
LimitCORE=infinity
[Install]
WantedBy=multi-user.target
将.service文件拷贝至/usr/lib/systemd/system/下
cp ping@.service /usr/lib/systemd/system/
systemctl daemon-reload
# 启动服务
systemctl start ping@1
# 查看服务进程
ps –aux | grep ping
systemctl是一个systemd工具,负责控制systemd系统和管理系统服务。
#当新增或修改service单元文件时,需要系统重新加载所有修改过的配置文件
systemctl daemon-reload
#设置为开机自启动
systemctl enable RegisterCenter
#关掉开机启用
systemctl disable RegisterCenter
#启动服务
systemctl start RegisterCenter
#重启服务,相当于先stop,再start
systemctl restart RegisterCenter
#关闭服务,关闭服务后,进程会全部被kill掉
systemctl stop RegisterCenter
#查看服务的状态
systemctl status RegisterCenter
#查看服务是否开机启动
systemctl is-enabled RegisterCenter
#查看已启动的服务列表
systemctl list-unit-files|grep enabled
#
显示所有已启动的服务
systemctl list-units --type=service
#查看启动失败的服务列表
systemctl --failed
# 杀死一个服务的所有子进程
systemctl kill RegisterCenter
# 重新加载一个服务的配置文件
systemctl reload RegisterCenter
#移除标记为丢失的 Unit 文件。在删除 Unit 文件后,由于缓存的关系,
#即使通过 daemon-reload 更新了缓存,在 list-units 中依然会显示标记为 not-found 的 Unit
systemctl reset-failed RegisterCenter
主要包括服务描述、启动顺序和依赖关系。
说明:After和Before字段只涉及启动顺序,不涉及依赖关系。
说明:Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
定义启动类型。可设置的值如下:
为服务设置环境变量。
加载包含服务所需环境变量参数的文件。
该服务PID文件的路径(一般位于 /run/
目录下)。 建议在 Type=forking
的情况下明确设置此选项。 如果设为相对路径,那么表示相对于 /run/
目录。 systemd 将会在此服务启动完成之后,从此文件中读取主服务进程的PID 。 systemd 不会写入此文件,但会在此服务停止后删除它(若仍然存在)。
启动程序时执行的命令。例如:
# %d为启动时需要传入的参数
ExecStart=/usr/bin/ping 127.0.0.%d
重启服务执行的命令。例如:
ExecReload=/bin/kill -s -HUP $MAINPID
表示终止主进程且不产生core dump,重启服务。
通知服务时执行的命令。例如:
ExecStop=/bin/kill -s QUIT $MAINPID
表示中断退出的方式终止进程且产生core dump,停止服务。
启动服务之前执行的命令。
启动服务之后执行的命令。
停止服务之后执行的命令。
定义systemd如何停止sshd服务。设置值如下:
l control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;
l process:只杀主进程;
l mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号;
l none:没有进程会被杀掉,只是执行服务的 stop 命令;
定义sshd退出后,systemd的重启方式。设置值如下:
说明:对于守护进程,推荐设为on-failure。对于那些允许发生错误退出的服务,可以设为on-abnormal。
服务出现情况与重启对应表
退出原因/设置值 | no | always | on-success | on-failure | on-abnormal | on-abort | on-watchdog |
---|---|---|---|---|---|---|---|
正常退出 | √ | √ | |||||
退出码不为0 | √ | √ | |||||
进程被强制杀死 | √ | √ | √ | √ | |||
操作超时 | √ | √ | √ | ||||
看门狗超时 | √ | √ | √ | √ |
额外定义其他的进程"正常退出"状态。 也就是,在退出码"0"、以及表示"正常退出"的 SIGHUP, SIGINT, SIGTERM, SIGPIPE 信号之外, 再额外添加一组表示"正常退出"的退出码或信号。 可以设为一系列以空格分隔的数字退出码或者信号名称, 例如:
SuccessExitStatus=1 2 8 SIGKILL
表示当进程的退出码是 1, 2, 8 或被 SIGKILL 信号终止时, 都可以视为"正常退出"。
如果多次使用此选项, 那么最终的结果将是多个列表的合并。 如果将此选项设为空, 那么先前设置的列表 将被清空。
重启服务之前需要等待的秒数。
指定服务工作目录
指定运行服务的用户。
设置true表示在进程的文件系统名字空间中挂载私有的/tmp和/var/tmp目录,也就是不与名字空间外的其他进程共享临时目录。这样做会增加进程的临时文件安全性,但同时也让进程之间无法通过/tmp或/var/tmp目录进行通信。
用来定义如何启动以及是否开机启动。
表示该服务所在的Target。 Target的含义是服务组,表示一组服务。“WantedBy=multi-user.target”指的是服务所在的Target是multi-user.target。
multi-user.target是systemd默认启动的Target,表示在这个组里的所有服务,都开机启动。
依赖当前服务的模块。它的值是一个或多个 target,执行enable命令时,符号链接会放入/etc/systemd/system目录下以 target 名 + .required后缀构成的子目录中。
当前Unit可用于启动的别名。
当前 Unit 被 enable/disable 时,会被同时操作的其他 Unit
Target 就是一个 Unit 组,包含许多相关的 Unit 。启动某个 Target 的时候,Systemd 就会启动里面所有的 Unit。
# 查看当前系统的所有 Target
$ systemctl list-unit-files --type=target
# 查看一个 Target 包含的所有 Unit
$ systemctl list-dependencies multi-user.target
# 查看启动时的默认 Target
$ systemctl get-default
# 设置启动时的默认 Target
$ systemctl set-default multi-user.target
# 切换 Target 时,默认不关闭前一个 Target 启动的进程,systemctl isolate 命令改变这种行为,关闭前一个 Target 里面所有不属于后一个 Target 的进程
systemd中文文档可参考:http://www.jinbuguo.com/systemd/systemd.service.html#