Ubuntu20.10
添加系统服务命令
系统环境
Ubuntu: 20.10
需要工具
Vim
安装方式
sudo apt install vim -y
添加系统服务命令的位置是在
/lib/systemd/system
文件夹中,如果你的虚拟机或者服务器上安装了Nginx
服务的话,那么可以cat /lib/systemd/system/nginx.serivce
来查看学习一下。首先创建一个
service
文件,文件名就是你的服务名vim YourServiceName.service
然后在文件里面写入(先不急着写,可以先看博主的逐行解释)
如果你是刚刚更改完
service
文件的话,systemctl daemon-reload
[Unit] Description=Your service desctuption After= [Service] PIDFile=/run/YourServiceName.pid ExecStart=/bin/bash -c " echo 3 " ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/YourServiceName.pid Type=oneshot RemainAfterExit=yes [Install] WantedBy=multi-user.target
[Unit] # Unit 服务的说明 Description=Your service desctuption # Description 描述服务 After=network.target # After 在运行此服务前,先执行什么服务 RefuseManualStart=no(默认) # RefuseManualStart, RefuseManualStop 如果设为yes,那么此单元将拒绝被手动启动(RefuseManualStart=) 或拒绝被手动停止(RefuseManualStop=)。 也就是说,此单元只能作为其他单元的依赖条件而存在,只能因为依赖关系而被间接启动或者间接停止,不能由用户以手动方式直接启动或者直接停止。设置此选项是为了禁止用户意外的启动或者停止某些特定的单元。 Documentation=man:systemd.special(7) # 对此详细说明的文档,man手册systemd的第7部分 [Service] # Service 服务运行参数的设置 PIDFile=/run/YourServiceName.pid # PIDFile 服务进程文件(以及存放位置) Type=forking # 取值范围: simple, exec, forking, oneshot, dbus, notify, idle # forking是后台运行的形式, oneshot是一次运行,若启动失败为0则失败 ExecStart # ExecStart 绝对路径 服务的具体运行命令 ExecReload # ExecReload 绝对路径 重启命令 ExecStop # ExecStop 绝对路径 停止命令 PrivateTmp=True # 表示给服务分配独立的临时空间 KillMode=control-group # KillMode 取值范围: control-group(默认)(主子进程全杀), process, mixed, none TimeoutSec=5 # 一个同时设置 TimeoutStartSec=(最大启动时间) 与 TimeoutStopSec=(最大停止时间) 的快捷方式。超时则强制关闭 RemainAfterExit=no # 当该服务的所有进程全部退出之后, 是否依然将此服务视为活动(active)状态。 默认值为 no [Install] # 服务安装的相关设置,可设置为多用户 WantedBy=multi-user.target # WantedBy 执行 systemctl enable 启用命令之后,将会建立一个指向该单元文件的软链接 /etc/systemd/system/multi-user.target.wants/foo.service,表示将 foo.service 包含到 multi-user.target 目标中,这样,当启动 multi-user.target 目标时, 将会自动起动 foo.service 服务。同时,systemctl disable 命令 将会删除这个软连接。
关于
Type
类型,参考systemd的oneshot与forking service的区别和systemd.service 中文手册关于
RefuseManualStart
参数,参考systemd.unit 中文手册关于
killMode
参数,参考systemd.kill 中文手册