ubuntu设置程序开机自启动

文章目录

    • 1、概述
    • 2、图形界面设置
    • 3、设置为Systemd服务

1、概述

测试环境:ubuntu22.04 带图形界面
实现方式1:通过图形界面的【启动应用程序】设置开机自启动;
实现方式2:通过配置为服务实现开机自启动。

2、图形界面设置

优点:

  • 图形界面
  • 使用简单

缺点:

  • 灵活性差,如果启动有依赖或者需要实现守护进程只能通过写shell脚本实现。
  • 找到【启动应用程序】;

    在这里插入图片描述

  • 点击【添加】,然后在【命令】栏输入需要启动的可执行程序路径,名称随便填。

    在这里插入图片描述

  • 点击【保存】后,在系统启动后会自动启动添加的可执行程序。

  • 配置文件保存在~/.config/autostart文件夹下。

3、设置为Systemd服务

优点:

  • 功能强大,使用灵活;
  • 支持设置程序启动依赖,例如在网络准备好了后再启动;

缺点:

  • 没有图形界面,使用较为复杂;
  • 官方文档

  • 进入/etc/systemd/system文件夹;

  • 创建一个.service后缀的文件,名称自定;

  • 文件中填入启动服务的配置信息,如下所示;

[Unit]
Description=WebServer    # 简单描述服务
After=network.target     # 指定服务模块启动后再启动(网络模块启动)[Service]
User=mhf                 # 设置服务运行的用户,带图形界面的程序最好使用普通用户运行,否则可能会启动失败,自己系统的用户名
WorkingDirectory=/home/mhf/Code/bin64      # 设置进程的工作目录
ExecStart=/home/mhf/Code/bin64/ChatServer  # 设置启动的可执行程序路径
Restart=always                             # 设置进程 退出后的重启方式 always:总是重启
RestartSec=5                               # 重启服务之前需要等待的秒数
Environment=DISPLAY=:0   # 带图形界面的程序必须指定运行桌面环境,否则会启动失败
# 环境变量 DISPLAY 告诉GUI程序如何与GUI通信。Unix系统可以运行多个X服务器,即多个显示。这些显示可以是物理显示(一个或多个监视器),或远程显示(通过网络转发,例如通过SSH),或虚拟显示,如Xvfb等。指定显示的基本语法是 HOST:NUMBER ;如果忽略 HOST 部分,则显示为本地显示。
# 显示从0开始编号,因此 :0 是启动的第一个本地显示。在典型的设置中,这是显示在计算机显示器上的内容。[Install]
WantedBy=multi-user.target
  • 常用配置说明
[Unit]    # 启动顺序与依赖关系。
Description:对当前服务的简单描述。
After:指定.serive在哪些服务之后进行启动;
Before:指定.serive在哪些服务之前进行启动;
除上述内容,文件中还可能出现以下内容:
Requires:指定服务依赖于哪些服务(强依赖关系,一旦所依赖服务异常,当前服务也随之停止);
Wants:指定服务依赖于哪些服务(弱依赖关系,所依赖服务异常不影响当前服务正常运行)。[Service]   # 启动行为
Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle。
simple:ExecStart 字段启动的进程为该服务的主进程;
forking:ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程;
ExecStart:定义启动进程时执行的命令;
ExecStop:停止服务时执行的命令;
除上述内容外,文件中还可能出现:
EnvironmentFile:环境配置文件,用来指定当前服务启动的环境变量;
ExecReload:重启服务时执行的命令;
ExecStartPre:启动服务之前执行的命令;
ExecStartPost:启动服务之后执行的命令;
ExecStopPost:停止服务之后执行的命令;
RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行;
RestartSec:重启服务之前需要等待的秒数。
KillMode:定义 Systemd 如何停止服务,可以设置的值如下:control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;process:只杀主进程;mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号;none:没有进程会被杀掉。
Restart:定义了退出后,Systemd 的重启方式,可以设置的值如下:no(默认值):退出后不会重启;on-success:当进程正常退出时(退出状态码为0),才会重启;on-failure:当进程非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;on-abnormal:当被信号终止和超时,才会重启;on-abort:当收到没有捕捉到的信号终止时,才会重启;on-watchdog:看门狗超时退出,才会重启;always:总是重启。[Install]  # 区块
Install一般填为WantedBy=multi-user.target,表示多用户环境下服务被启用。
  • 配置完成后加载服务配置,用于服务文件修改后的配置更新。
sudo systemctl daemon-reload 
  • 立即启动服务
sudo systemctl start <service_name>
# 例如
sudo systemctl start ChatServer.service
sudo systemctl start ChatServer
  • 停止服务
sudo systemctl stop <service_name>
# 例如
sudo systemctl stop ChatServer.service

错误信息 :如果GUI程序没设置使用普通用户启动、没有设置Environment=DISPLAY=:0就会报错

1125 17:48:30 mhf-virtual-machine systemd[1]: Stopped WebServer.
1125 17:48:30 mhf-virtual-machine systemd[1]: Started WebServer.
1125 17:48:30 mhf-virtual-machine ChatServer[5154]: Authorization required, but no authorization protocol specified
1125 17:48:30 mhf-virtual-machine ChatServer[5154]: qt.qpa.xcb: could not connect to display :0
1125 17:48:30 mhf-virtual-machine ChatServer[5154]: qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
1125 17:48:30 mhf-virtual-machine ChatServer[5154]: This application failed to start because no Qt platform plugin could be initialized.  Reinstalling the application may fix this problem.
1125 17:48:30 mhf-virtual-machine ChatServer[5154]: Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
1125 17:48:30 mhf-virtual-machine systemd[1]: ChatServer. service: Main process exited, code=dumped, status=6/ABRT
1125 17:48:30 mhf-virtual-machine systemd[1]: ChatServer. service: Failed with result 'core-dump'.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/479254.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4.STM32之通信接口《精讲》之IIC通信---软件实现IIC《深入浅出》面试必备!

接下正式&#xff0c;进入软件编写IIC时序了&#xff0c;并实现对MPU6050的控制&#xff0c;既然是软件实现&#xff0c;那么硬件方面&#xff0c;我仅需两根控制线即可&#xff0c;即&#xff1a;数据控制线SDA&#xff0c;时钟控制线SCL。&#xff08;人为软件层面定义的&…

使用mingw+CMake在Windows平台编译OpenCV

1. 安装mingw和cmake cmake的安装比较简单&#xff0c;百度一下完成相关操作即可&#xff0c;笔者安装的是3.24.3版本。 Mingw的安装也有很多相关文章&#xff0c;不过我使用的是安装QT时附带安装的mingw&#xff0c;其路径为D:\software\Qt\Tools\mingw1120_64。其中的bin文件…

2024APMCM亚太杯数学建模C题【宠物行业】原创论文分享

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024 年APMCM亚太地区大学生数学建模竞赛C题的成品论文。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 10 一、问题重述 14 二&#xff0e;问题分析 15 2.1问题一 15 2.2问题二 15 2.3问题三…

win10中使用ffmpeg和MediaMTX 推流rtsp视频

在win10上测试下ffmpeg推流rtsp视频&#xff0c;需要同时用到流媒体服务器MediaMTX 。ffmpeg推流到流媒体服务器MediaMTX &#xff0c;其他客户端从流媒体服务器拉流。 步骤如下&#xff1a; 1 下载MediaMTX github: Release v1.9.3 bluenviron/mediamtx GitHub​​​​​…

海康面阵、线阵、读码器及3D相机接线说明

为帮助用户快速了解和配置海康系列设备的接线方式&#xff0c;本文将针对海康面阵相机、线阵相机、读码器和3D相机的主要接口及接线方法进行全面整理和说明。 一、海康面阵相机接线说明 海康面阵相机使用6-pin P7接口&#xff0c;其功能设计包括电源输入、光耦隔离信号输入输出…

vue3(十七)-基础入门之vue-nuxt路由

一、路由 Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。 要在页面之间使用路由&#xff0c;建议使用 < nuxt-link> 标签。 <template><nuxt-link to"/">首页</nuxt-link> </template>1、基础路由 pages 的目录结…

C++设计模式-中介者模式

动机(Motivation) 多个对象相互关联的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化。在这种情况下&#xff0c;可以使用一种”中介对象“来管理对象间的关联关系&#xff0c;避免…

IntelliJ+SpringBoot项目实战(十四)--在SpringBoot中整合SpringSecurity和JWT(上)

SpringSecurity是大名鼎鼎的认证授权框架&#xff0c;在SSH时代就已经大放异彩。在JAVA项目中&#xff0c;权限框架的解决方案主要是以SpringSecurity和Shiro为主。JWT是目前主流的基于access-token的的认证框架&#xff0c;在项目中一般时SpringSecurity和JWT结合使用&#xf…

【AI系统】Tensor Core 架构演进

自 Volta 架构时代起&#xff0c;英伟达的 GPU 架构已经明显地转向深度学习领域的优化和创新。2017 年&#xff0c;Volta 架构横空出世&#xff0c;其中引入的张量核心&#xff08;Tensor Core&#xff09;设计可谓划时代之作&#xff0c;这一设计专门针对深度学习计算进行了优…

问题记录-Java后端

问题记录 目录 问题记录1.多数据源使用事务注意事项&#xff1f;2.mybatis执行MySQL的存储过程&#xff1f;3.springBoot加载不到nacos配置中心的配置问题4.服务器产生大量close_wait情况 1.多数据源使用事务注意事项&#xff1f; 问题&#xff1a;在springBoot项目中多表处理数…

java:aqs实现自定义锁

aqs采用模板方式设计模式&#xff0c;需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…

day11_JS初识_语法

day11_JS初识_语法 今日学习目标 : 入门HarmonyOS生态中 , ArkTS最基础的语法 JavaScript , 今天最主要的学习内容了解和掌握JavaScript的基础语法 , 并灵活的再后面开发过程进行使用 今日学习目标 什么是JavaScript JavaScript组成 JavaScript执行环境 JavaScript代码的书…

[C++]:IO流

1. IO 流 1.1 流的概念 在C中&#xff0c;存在一种被称为“流”的概念&#xff0c;它描述的是信息流动的过程&#xff0c;具体来说就是信息从外部输入设备&#xff08;比如常见的键盘&#xff09;传输到计算机内部&#xff08;像内存区域&#xff09;&#xff0c;以及信息从内…

基于Kubernetes编排部署EFK日志收集系统

基于K8S编排部署EFK日志收集系统 案例分析 1. 规划节点 节点规划&#xff0c;见表1。 表1 节点规划 IP主机名k8s版本信息192.168.100.3masterv1.25.2192.168.100.4nodev1.25.2 2. 基础准备 Kubernete环境已安装完成&#xff0c;将提供的软件包efk-img.tar.gz上传至master…

Kubernetes 还是 SpringCloud?

前些年&#xff0c;随着微服务的概念提出以及落地&#xff0c;不断有很多的公司都加入到了这场技术革新中&#xff0c;现在可谓是人人都在做和说微服务。 提到微服务&#xff0c;Java栈内&#xff0c;就不得不提SpringBoot、SpringCloud、Dubbo。 近几年&#xff0c;随着Cloud …

ChatGPT如何辅助academic writing?

今天想和大家分享一篇来自《Nature》杂志的文章《Three ways ChatGPT helps me in my academic writing》&#xff0c;如果您的日常涉及到学术论文的写作&#xff08;writing&#xff09;、编辑&#xff08;editing&#xff09;或者审稿&#xff08; peer review&#xff09;&a…

101.【C语言】数据结构之二叉树的堆实现(顺序结构) 2

目录 1.堆删除函数HeapPop 一个常见的错误想法:挪动删除 正确方法 设计堆顶删除函数HeapPop 解析向下调整函数AdjustDown 核心思想 向下调整最多次数 向下调整的前提 代码实现 提问 细节分析 2.测试堆删除函数 运行结果 3.引申问题 运行结果 4.练习 分析 代码…

【机器学习chp8】统计学习理论

前言 本文遗留问题&#xff1a;无 目录 前言 一、结构风险最小化 1、最小化风险决策 2、分类与回归中的最小化风险决策 3、统计学习的基本目标 4、无免费午餐定理 5、Hoeffding不等式 &#xff08;1&#xff09;背景及定义 &#xff08;2&#xff09;Hoeffding不等式…

Springboot启动报错’javax.management.MBeanServer’ that could not be found.

报错信息如下图&#xff1a; 解决办法&#xff1a; 1.在你的.yml文件或者.properties文件里加上如下配置&#xff1a; properties: management.endpoints.jmx.enabledfalseyml: management:endpoints:jmx:enabled: false2.如果以上方法行不通&#xff0c;在springboot启动类…

英语知识网站:Spring Boot技术构建

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…