Linux开机自启——SystemdService简单配置
Linux系统-开机自动执行的脚本配置
systemd service简介
**官腔:**一种以 .service 结尾的单元(unit)配置文件,用于控制由 systemd 控制或监视的进程。简单说,用于后台以守护精灵(daemon)的形式运行程序。
**实际上:**在Linux操作系统上以服务注册到系统的脚本配置,我将其理解为类似于Windows上的服务进程。可以被systemctl
管理的一类服务进程。而其启动动作和其他信息都保存在它的配置文件中,即.service
文件。
基本结构
[Unit]
:控制单元的定义,可以定义该服务的描述,需求模块等
[Service]
:定义服务主体的动作,工作目录等。
[Install]
:安装定义。
基本语法
与yaml配置文件的语法类似:on
,yes
,true
,1
表示开启,off
,no
,false
,0
表示关闭。
上述规则不适用于嵌入的shell语句。
QuickStart
定义控制单元
[Unit]
Description=这里是服务的描述,不需要定义名称。
Wants=表明本服务需要依靠某某服务才能运行。但是被依赖服务未启动也不影响本服务的启动。
require=本服务依赖的服务,被依赖服务未启动,则本服务不启动。
Before=本服务要在某服务启动之前启动。
After=本服务在某服务启动之后启动。
定义服务本体
[Service]
Type=服务类型
常用服务类型:
- simple:默认,跑完就退。
- forking:启动程序后会调用 fork() 函数,把必要的通信频道都设置好之后父进程退出,留下守护精灵的子进程。人走魂还在。
- oneshot:启动之后关闭进程,但在你关闭服务之前,它的状态仍然是
running
。 - dbus:这个程序启动时需要获取一块 DBus 空间,所以需要和 BusName= 一起用。只有它成功获得了 DBus 空间,依赖它的程序才会被启动。
- notify :嘿嘿,没学会。
- idle :服务中的其他调用全部完成之后在执行服务本身。
举个例子:
[Service]
Type=oneshot#设置服务类型是oneshot
RemainAfterExit=yes#表示即便进程退出也视作运行中
Restart=yes#退出自动重启
WrokingDirectory=/A/path#设置工作路径,否则会找不到文件
ExecStart=./app start my service #写入启动脚本,表示服务启动要执行的命令,换行要加"\"
ExecStop=./app stop my service #退出脚本,同上
安装
这里的安装其实指的是这个服务会被谁使用,而不是没人要的。目标单位(target units)是 systemd 中的一种特殊单位,代表系统在不同运行级别或状态下的目标。例如,multi-user.target
表示多用户模式,graphical.target
表示图形界面模式。
举例:
[Install]
WantedBy=multi-user.target #表示系统进入多用户模式时启动服务
Alias=example#服务别名,systemctl可以通过这个别名访问到这个服务。
启动停止与开机自启动
确认编写无误后,将写好的配置文件命名为<服务名>.service,并复制到/etc/systemd/system/
目录下。然后就可以将程序作为服务启动了:
systemctl start <servicename>.service#启动服务
systemctl stop <servicename>.service#停止服务
systemctl status <servicename>.service#查看运行状态
systemctl enable <servicename>.service#启动开机自启
systemctl disable <servicename>.service#关闭开机自启
完整示例
[Unit]
Description=Restart my blog while reboot
Requires=network.target
After=network.target
[Service]
ExecStart=./ docker compose ud -d
WorkingDirectory=/apps/blog/
User=root
Type=simple
Restart=always
[Install]
WantedBy=default.target
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 杰出咸鱼
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果