发布网友 发布时间:2024-10-04 01:38
共1个回答
热心网友 时间:2024-10-09 03:42
为了将一个脚本配置为开机自启,我们主要使用 systemd 的 .service 文件实现此功能。以下是对配置服务器 systemd 方法的简要介绍。
systemd 是系统启动和服务器守护进程管理器,负责激活系统资源、服务器进程和其他进程。它旨在减少对 shell 脚本的依赖,并尽可能并行启动更多进程,同时启动更少进程。
一个 .service 文件的基本结构包含三个主要部分:控制单元(unit)定义、服务(service)定义及安装部分。控制单元(unit)定义了服务的依赖关系和启动顺序,服务(service)定义了服务的执行方式,而安装部分则说明如何将服务添加到系统启动过程中。
控制单元(unit)定义中的 Wants 字段与 Requires 字段表示依赖关系,但与启动顺序无关。而 After 和 Before 字段则关注启动顺序,不涉及依赖关系。
在服务本体(service)中,若 Type 不为 oneshot,则 ExecStart 配置只能执行一条命令,而多个相同配置会选择最后一条。通过在命令前添加连词号(-),可以实现即使指定文件不存在也不抛出错误。
安装服务(install)部分通过 WantedBy 字段指定服务所在的 Target(服务组),确保服务在系统启动时正确加载。
在树莓派中创建自定义服务时,首先进入 /usr/lib/systemd/system/ 目录,新建服务脚本。若该目录不存在,可自行建立。按照上述规则编写脚本后,设置服务自启动。完成设置后,执行命令 $ sudo systemctl enable my_t265.service,系统会在 /lib/systemd/system/ 目录中创建配置文件,并建立链接到启动目录,使服务在系统启动时自动运行。
启动 .service 文件时,运行命令 $ systemctl start my_t265.service,查看服务状态使用 $ systemctl status my_t265.service 或者 $ journalctl 查看日志。
在单个 .service 文件中执行多个 ExecStart 命令,需将 Type 设置为 oneshot。此类型服务仅在启动后即完成,不保留后台进程。
树莓派开机重刷USB口是一个使用 .service 文件实现的例子。此外,了解 systemd-analyze 命令可帮助诊断服务启动问题,该命令能显示服务启动时间和关键链。
配置时,通过编辑 systemd.conf 文件,并重启系统,添加环境变量确认服务启动状态。使用 status 或 journalctl 命令查看详细输出。
关于 Target(启动模式),默认的 multi-user.target 表示多用户命令行状态,而 graphical.target 为图形用户状态,依赖于 multi-user.target。修改默认启动模式时,考虑两个常用的 Target:多用户命令行和图形用户状态。
推荐资料包括 systemd.service 中文手册、systemctl 配置文件文档、systemd-analyze 命令介绍,以及相关链接如树莓派配置自定义服务实现开机自启的教程。