200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【Linux】使用systemd设置开机自启动命令

【Linux】使用systemd设置开机自启动命令

时间:2022-08-30 00:21:57

相关推荐

【Linux】使用systemd设置开机自启动命令

目录

1 使用使用systemd实现开机自动运行命令1.1 新建一个.service文件1.2 编写.service文件1.2.1 [Unit]1.2.2 [Service]1.2.3 [Install] 1.3 启动服务并设置自启动 2 编写Systemd服务文件的要点2.1 Systemd服务文件的位置2.2 Systemd服务文件的格式2.3 Systemd服务文件的基本结构2.3.1 [Unit]字段的配置2.3.2 [Service]字段的配置2.3.3 [Install]字段的配置 2.4 示例 .service 文件

1 使用使用systemd实现开机自动运行命令

systemd是Linux系统中现代化的初始化系统,可以使用它来实现开机自动运行命令。在systemd中,可以通过创建一个service文件,把要执行的命令放在其中,然后将其添加到systemd的自启动项中。

具体操作步骤如下:

1.1 新建一个.service文件

首先在终端中使用sudo权限创建一个.service文件,用于存储service配置:

sudo vim /etc/systemd/system/myservice.service

1.2 编写.service文件

在打开的文件中添加以下内容(此处演示的开机自启命令是需要sudo权限的),注意将其中的ExecStart替换为需要开机自启动的具体命令,ExecStart后面加上sudo。

[Unit]Description=My ServiceAfter=network.target[Service]Type=simpleExecStart=sudo /path/to/my/commandUser=root[Install]WantedBy=multi-user.target

1.2.1 [Unit]

[Unit]是systemd服务文件的一个部分,用于定义服务的基本信息。

Description字段包含了一个简短的描述,用于描述服务的名称,方便用户在查找时快速了解服务的作用。

After=network.target表示此服务会在网络服务启动后启动。

network.target是指网络目标单元,是Systemd中预定义的一个特殊单元,用于表示网络服务的启动状态。几乎所有的网络服务,例如DHCP、DNS解析等,在启动时都依赖于网络服务的可用性。因此,将After=network.target添加到服务的unit文件中,可以确保该服务在网络服务就绪后再启动,从而避免出现启动时的依赖性错误。

1.2.2 [Service]

[Service]是systemd服务文件中的另一个部分,用于定义服务的具体行为。

Type字段是服务运行时的类型,simple表示它是一个后台进程,通常用于只有一个进程的服务。ExecStart字段包含了要运行的命令,多个命令可以用换行符(\n)隔开。User字段指定了以哪个用户的身份运行这个服务,这里选择root用户。

1.2.3 [Install]

[Install]定义了systemd服务的安装信息。

WantedBy字段指定了服务将要执行的“target”(一种操作系统运行级别),这里指定的“multi-user.target”是Linux系统默认的、包含多个用户的运行级别,相当于传统的“init 3”运行级别。这意味着服务将在系统启动时自动运行。

1.3 启动服务并设置自启动

保存并退出上述.service文件,下面的命令可以启动服务并将其添加到系统自启动项中:

sudo systemctl start myservicesudo systemctl enable myservice

执行完该命令后,可以使用systemctl命令来查看该服务的状态:

sudo systemctl status myservice.service

启动服务后,它将在系统启动时自动启动。也可以在任何时候使用以下命令停止服务并从自启动项中删除:

sudo systemctl stop myservicesudo systemctl disable myservice

2 编写Systemd服务文件的要点

2.1 Systemd服务文件的位置

Systemd服务文件通常存放在/etc/systemd/system目录下。该目录包含了各种类型的服务文件,如系统服务、用户服务、网络等等。

2.2 Systemd服务文件的格式

Systemd服务文件通常是以.service结尾的文本文件。服务文件中的各项设置使用键值对的形式指定,每一行都是以key=value的形式组成。

2.3 Systemd服务文件的基本结构

Systemd服务文件通常包含了以下配置项:

[Unit]:服务的全局信息和依赖性声明,如服务名称、描述等。

[Service]:指定服务的具体配置,如服务执行的命令、工作目录等。

[Install]:指定服务的安装方式,如服务的启动级别等。

2.3.1 [Unit]字段的配置

Description:对服务的简短描述。

Before:定义服务在其他服务之前启动。

After:定义服务在其他服务之后启动。

Requires:定义服务启动需要哪些其他服务已启动,否则无法启动。

PartOf:定义该服务是其他服务的一部分,如果其他服务停止,该服务也会停止。

Wants:定义服务启动时可同时启动哪些其他服务。

Condition...:定义服务启动的条件,如ConditionPathExists表示某个路径存在时才启动该服务。

2.3.2 [Service]字段的配置

Type:服务类型,可以是simple、forking、ondemand、notify等。

ExecStart:服务启动命令,可以是单个命令、脚本文件、或者多个命令组成的脚本。

ExecStop:停止服务的命令。

User:定义服务运行的用户。

Group:定义服务运行的用户组。

PrivateTmp:将服务的/tmp目录挂载到私有的命名空间中,以增强安全性。

Restart:定义服务异常退出时如何重启。

WorkingDirectory:定义服务工作目录。

Environment:定义服务的环境变量等。

ProtectSystem:防止服务对系统文件进行修改。

NoNewPrivileges: 防止服务通过setuid或setgid等提升权限。

2.3.3 [Install]字段的配置

WantedBy:定义在哪些系统运行级别下启用此服务。

RequiredBy:启动其他系统服务时必需启动此服务。

2.4 示例 .service 文件

[Unit]Description=MyServiceAfter=network.target[Service]Type=simpleExecStart=/usr/bin/myserviceWorkingDirectory=/var/myserviceUser=myserviceGroup=myserviceRestart=alwaysRestartSec=30StartLimitInterval=400StartLimitBurst=3[Install]WantedBy=multi-user.target

这个示例中定义了一个名为"MyService"的服务,服务启动时执行/usr/bin/myservice命令,执行工作目录为/var/myservice,运行用户为myservice。如果服务异常退出,则每30秒尝试重新启动,最多尝试3次。最后,服务将在多用户运行级别下启用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。