From 71e8718e1f2bcfdd9098f37ad6dcbb489d094f3f Mon Sep 17 00:00:00 2001 From: "rick.chan" Date: Fri, 14 Jun 2024 12:19:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=20systemd=20=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=E5=90=AF=E5=8A=A8=20QPA=20=E7=A8=8B=E5=BA=8F=E5=8F=82?= =?UTF-8?q?=E8=80=83=E8=B5=84=E6=96=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: rick.chan --- .../Qt/Embedded/Qt_Embedded_说明.md | 38 +++++++++++++++++++ .../Modules/Systemd/Systemd_基本控制命令.md | 17 +++++++-- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/Software/Development/Environment/Qt/Embedded/Qt_Embedded_说明.md b/Software/Development/Environment/Qt/Embedded/Qt_Embedded_说明.md index 7a44899..81c571c 100644 --- a/Software/Development/Environment/Qt/Embedded/Qt_Embedded_说明.md +++ b/Software/Development/Environment/Qt/Embedded/Qt_Embedded_说明.md @@ -53,6 +53,8 @@ export QT_DEBUG_PLUGINS=1 ## 2. 自启动 +### 2.1. init 方式启动 + 如果程序能通过命令行进行启动,则可以通过系统服务来实现自开机自启动。 首先,在 /etc/init.d/ 文件夹下创建一个启动脚本,比如 mydemo: @@ -127,3 +129,39 @@ chkconfig --level 2345 mydemo on # 查看服务 chkconfig --list | grep mydemo ``` + +### 2.1. systemd 方式启动 + +在 /usr/lib/systemd/system 下创建 mydemo.service 文件,参考内容如下: + +```service +[Unit] +Description=MyDemo +# After=syslog.target +After=network.target +After=multi-user.target +# After=graphical.target + +[Service] +RestartSec=2s +Type=simple +User=root +Group=root +WorkingDirectory=/path/to/workDirectory +ExecStart=/path/to/demo/demo -platform linuxfb:fb=/dev/fb0:mmsize=1920x1080 +Restart=always + +[Install] +WantedBy=multi-user.target +``` + +也可以视情况将 After=multi-user.target 修改为 After=graphical.target。 + +然后使用 systemctl 命令控制服务: + +```bash +systemctl enable mydemo +systemctl start mydemo +systemctl stop mydemo +systemctl disable mydemo +``` diff --git a/Software/System/Linux/Modules/Systemd/Systemd_基本控制命令.md b/Software/System/Linux/Modules/Systemd/Systemd_基本控制命令.md index 2b1ae65..a57c9c0 100644 --- a/Software/System/Linux/Modules/Systemd/Systemd_基本控制命令.md +++ b/Software/System/Linux/Modules/Systemd/Systemd_基本控制命令.md @@ -1,6 +1,6 @@ # Systemd 基本控制命令 -## 1.systemctl +## 1. systemctl systemctl 可用于 检查和控制 systemd(1) 系统与服务管理器的状态: @@ -35,8 +35,9 @@ systemctl [OPTIONS...] COMMAND [UNIT...] | import-environment [VARIABLE…] | 导入 指定的客户端 环境变量 | | daemon-reload | 重新加载 systemd 守护进程的配置 | | list-dependencies [服务名] [--reverse] | 查看各服务之间的依赖性
--reverse:反向查看,查看这个服务被哪些服务所用到
省略服务名时:代表查看当前操作环境的服务关系 | +| list-jobs | 查看当前进行的任务 | -## 2.systemd-cgls +## 2. systemd-cgls systemd-cgls 以树的形式递归显示 指定的 Linux control group 内容的层次结构。 如果指定了 [CGROUP...] 参数, 那么仅递归的显示指定的控制组(cgroup)及其子控制组内的进程。 [CGROUP...] 参数可以指定为 完整的文件路径,也可以指定为 systemd 控制组层次的名称。 如果未指定 [CGROUP...] 参数, 并且当前的工作目录位于 /sys/fs/cgroup 之中, 那么将显示当前目录所对应的控制组中的内容, 否则,显示完整的 systemd 控制组层次结构: @@ -59,7 +60,7 @@ systemd-cgls [OPTIONS...] --unit|--user-unit [UNIT...] | --version | 显示简短的版本信息并退出 | | --no-pager | 不将程序的输出内容管道(pipe)给分页程序 | -## 3.systemd-analyze +## 3. systemd-analyze 分析与调试 systemd 系统管理器: @@ -143,7 +144,7 @@ systemd-analyze [OPTIONS...] security UNIT... systemd-analyze plot> something.svg ``` -## 4.配置 +## 4. 配置 journal 的配置在 /etc/systemd/journald.conf 中,主要配置项如下: @@ -166,3 +167,11 @@ LogLevel=info # LogTarget: Set log target. Argument must be one of console, journal, kmsg, journal-or-kmsg, null. LogTarget=journal-or-kmsg ``` + +## 5. 常用命令组合 + +```bash +# 关闭/恢复图形显示器虚拟终端字符登录界面。 +sudo systemctl mask getty@tty1.service +sudo systemctl unmask getty@tty1.service +```