Linux 下设置开机自启动的方法
文章目录
- 事先准备
- 对于普通的 Linux
- 对于 RedHat Enterprise Linux 9
笔者的运行环境:
设置成功过的 Linux:
RedHat Enterprise Linux 9 x86_64
CentOS 8 x86_64
事先准备
-
进行这个教程之前,必须要先安装好一个 Linux 操作系统。这个 Linux 操作系统可以安装在虚拟机中,也可以安装在真实的电脑中。关于这方面的内容,可见笔者的其它博客:
各种操作系统安装教程大全:
https://blog.csdn.net/wangpaiblog/article/details/115436520为了方便远程输入命令、将文件加入到 Linux 操作系统中,最好还要在一台 Windows 操作系统上面使用一种终端控制软件,如 Xshell、Xftp 等。关于这方面的内容,可见笔者的另一篇博客:
如何在 Windows 主机上访问本地局域网中的 Linux 主机:
https://blog.csdn.net/wangpaiblog/article/details/120052152 -
本文主要针对一些离线免安装的应用。很多应用在安装会自动设置开机启动,对这种应用不需要设置开机启动。联网应用在启动后会占用端口号,如果想验证这种应用有没有启动,可以使用如下命令。
netstat -na | grep 该应用的端口号
如果输出了该应用的端口号被使用的信息,说明该应用已经启动。
对于普通的 Linux
-
这种方法适用于一些有 Linux 的启动目录
init.d
的 Linux。对本方法而言,读者需要先提供一种供开机启动的脚本,不妨设为myapp
。
【踩坑提醒】
此脚本中不能使用 Linux 的环境变量。Linux 的环境变量一般在文件
/etc/profile
中设置,而文件/etc/profile
是在每一个用户登录 Shell 时才会读取的。在 Linux 启动之时此文件中的环境变量不会起作用。因此,如果需要使用 Linux 的环境变量,请将环境变量直接定义在此脚本开头。
-
将此脚本移动或复制到 Linux 的启动目录
init.d
中,然后对其添加执行权限。chmod +x /etc/rc.d/init.d/myapp
-
设置
myapp
开机自启动。chkconfig myapp on
-
输入以下命令验证是否成功设置了
myapp
开机自启动:chkconfig --list
如果输出结果含
myapp
,且3、4、5
值均为开
,说明设置成功。输出如下所示:myapp 0:关 1:关 2:开 3:开 4:开 5:开 6:关
-
重启电脑试一下是否真正成功。输入以下命令重启电脑:
reboot
重启后,马上输入以下命令:
netstat -na | grep 该应用的端口号
如果输出了端口号被使用的信息,说明
myapp
开机自启动成功。
对于 RedHat Enterprise Linux 9
-
对于一些较新的 Linux,它没有提供上面的启动目录
init.d
,而是改为使用服务来启动,这样设计要规范一些。对于使用服务来启动,需要编写一个.service
文件放置在目录/etc/systemd/system
下,并使用 systemctl 命令来控制这个服务。对本方法而言,读者需要先提供一些关于应用启动、停止等命令。
-
使用如下命令在目录
/etc/systemd/system
下创建一个关于 myapp 的.service
文件。touch /etc/systemd/system/myapp.service
-
编辑该文件,在其中写入如下内容。
[Unit] Description=myapp-server After=network.target[Service] ExecStart=应用启动命令 ExecReload=应用重新加载命令 ExecStop=应用停止命令 PrivateTmp=true Type=forking[Install] WantedBy=multi-user.target
【说明】
-
对于
[Unit]
:-
Description
:描述该服务的文字说明。 -
Documentation
:关于该服务的相关文档的URL。 -
Requires
:指定该服务所依赖的其他服务,如果这些服务没有运行,那么该服务也不会启动。 -
Wants
:指定该服务所希望依赖的其他服务,但不会影响该服务的启动。 -
After
:指定该服务应在哪些其他服务启动之后再启动。 -
Before
:指定该服务应在哪些其他服务启动之前启动。 -
Conflicts
:指定该服务与哪些其他服务冲突,如果这些服务之一正在运行,那么该服务将不会启动。 -
BindsTo
:指定该服务与哪些其他服务绑定,如果这些服务之一停止运行,那么该服务也会停止。 -
PartOf
:指定该服务是哪个服务的一部分,如果该服务停止运行,那么整个服务也会停止。
-
-
对于
[Service]
:-
上面的部分以
Exec
开头属性代表着某个命令systemctl 命令关键字 myapp
。对应关系如下:-
ExecStart
:启动服务的命令,对应systemctl start myapp
-
ExecStop
:停止服务的命令,对应systemctl stop myapp
-
ExecReload
:重新加载服务的命令,对应systemctl reload myapp
重新加载服务并不是重启服务。重新加载通常用于重新加载服务的配置文件或重新加载某些资源,以便服务可以在不中断运行的情况下应用更改。
-
-
也有一些以
Exec
开头的属性需要提供相应的脚本,但它们没有对应的命令systemctl 命令关键字 myapp
。-
ExecStartPre
:在启动服务之前执行的命令。 -
ExecStartPost
:在启动服务之后执行的命令。 -
ExecStopPre
:在停止服务之前执行的命令。 -
ExecStopPost
:在停止服务之后执行的命令。
-
-
其它属性:
-
Type
:指定服务的类型,可以是simple
、forking
、oneshot
、dbus
、notify
等。 -
WorkingDirectory
:指定服务的工作目录。 -
User
:指定服务运行的用户。 -
Group
:指定服务运行的用户组。 -
Restart
:指定服务在退出后是否自动重启,可以是no
、on-success
、on-failure
、on-abnormal
、on-abort
、always
等。 -
RestartSec
:指定服务重启之间的延迟时间。 -
Environment
:指定服务的环境变量。 -
ExecStartPre
:指定在服务启动之前要执行的命令或脚本。 -
ExecStartPost
:指定在服务启动之后要执行的命令或脚本。 -
ExecStopPre
:指定在服务停止之前要执行的命令或脚本。 -
ExecStopPost
:指定在服务停止之后要执行的命令或脚本。
-
-
-
对于
[Install]
:-
WantedBy
: 指定服务所属的目标(target),即服务应该在哪个目标中启动。可以指定为一个或多个目标,多个目标之间用空格分隔。例如,WantedBy=multi-user.target
表示服务应该在multi-user.target目标中启动。 -
RequiredBy
: 指定服务所需的目标(target),即服务应该在哪个目标中必须启动。与WantedBy
类似,可以指定为一个或多个目标,多个目标之间用空格分隔。 -
Also
: 指定其他服务的安装选项。可以指定为一个或多个服务名称,多个服务之间用空格分隔。例如,Also=other.service
表示在安装当前服务时,也同时安装other.service
。
-
-
补充:
- 有些命令没有对应的属性,如
systemctl restart myapp
。该重启命令相当于停止和启动命令的组合(如果服务如果未启动会直接执行启动命令,如果已启动会先执行停止再启动)。
- 有些命令没有对应的属性,如
【注意】
-
上面的命令必需使用该命令的全路径。不能因为前面在文件
/etc/profile
设置了 myapp 的环境变量,此处命令就不使用全路径了。文件/etc/profile
是在每一个用户登录 Shell 时才会读取的。在 Linux 启动之时此文件中的环境变量不会起作用。如果想在 Linux 启动时使用环境变量,可以将此环境变量单独放入一个文件(不妨设为
/etc/systemd/system/myappenv.conf
)中,然后在本.service
文件/etc/systemd/system/myapp.service
中的[Service]
部分使用EnvironmentFile
属性导入这个环境变量配置文件。[Service] EnvironmentFile=/etc/systemd/system/myappenv.conf
-
上面的某些属性不是必要的,如果没有对应的命令,可以省略(但启动命令不能省略),但省略之后就不能使用与该属性相关联的命令。比如,如果应用没有定义重新加载命令,则属性
ExecReload
可以省略,但同时不能使用命令systemctl reload myapp
。
-
-
关闭 SELinux。这样做是为了防止服务开机自启动时发生权限不足而启动失败。关于这个报错更多的信息,可见笔者的另一篇博客:
解决RHEL服务自启动时报错service Failed to locate executable…Failed at step EXEC spawning…Permission denied:
https://blog.csdn.net/wangpaiblog/article/details/131628261关闭 SELinux 的方法是修改文件
/etc/selinux/config
,将其中的属性enforcing
由enforcing
改为disabled
。然后重启 Linux 即可。 -
依次输出以下命令设置
myapp
开机自启动:systemctl daemon-reload
systemctl enable myapp.service
-
重启电脑试一下是否真正成功。输入以下命令重启电脑:
reboot
重启后,马上输入以下命令:
netstat -na | grep 该应用的端口号
如果输出了端口号被使用的信息,说明
myapp
已经启动。
相关文章:

Linux 下设置开机自启动的方法
文章目录 事先准备对于普通的 Linux对于 RedHat Enterprise Linux 9 笔者的运行环境: 设置成功过的 Linux: RedHat Enterprise Linux 9 x86_64 CentOS 8 x86_64 事先准备 进行这个教程之前,必须要先安装好一个 Linux 操作系统。这个 Linux…...

MySQL常见问题处理(三)
MySQL 常见问题解决 夕阳留恋的不是黄昏,而是朝阳 上一章简单介绍了MySQL数据库安装(二), 如果没有看过, 请观看上一章 一. root 用户密码忘记,进行重置操作 复制内容来源链接: https://blog.csdn.net/weixin_48927364/article/details/123556927 一.…...

maven中常见问题
文章目录 一、配置项提示二、父子打包三、打包之后不显示target四、自定义打包之后的jar包名称五、整个项目打包5.1、父项目管理插件和微服务打包 一、配置项提示 SpringBoot中提示错误信息 表示的是SpringBoot中的注释提示没有配置!那么可以来使用一下springboot官…...

vue2中bus的使用
说明:为了解决组件间的通信,也就是组件与组件间的数据传递(它们之间毫无关系); 这里以组件1传递数据到组件2为例 1.首先新建一个Bus.js文件 import Vue from vue const Bus new Vue() export default Bus 2.在组件1中引用 传递数据 imp…...

实证研究在机器学习中的应用
实证研究是一种基于实际数据和事实的科学研究方法,目的是通过观察、测量、分析和解释数据来验证或否定某个假设、理论或研究问题。这种研究方法通常用于社会科学、自然科学和医学等领域。以下是实证研究的详细解释: 研究目标:实证研究旨在通过…...

IO进程线程day8(2023.8.6)
一、Xmind整理: 管道的原理: 有名管道的特点: 信号的原理: 二、课上练习: 练习1:pipe 功能:创建一个无名管道,同时打开无名管道的读写端 原型: #include <unist…...

【5G NR】逻辑信道、传输信道和物理信道的映射关系
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...

tmux基础教程
tmux基础教程 Mac安装 brew install tmuxubuntu安装 sudo apt-get install tmux入门使用 会话 (Session) Ctrlb d: 分离当前会话。Ctrlb s: 列出所有会话。Ctrlb $: 重命名当前会话。 窗口(Window) Ctrlb c: 创建一个新窗口, 状态栏会显示多个窗…...

项目实战 — 消息队列(4){消息持久化}
目录 一、消息存储格式设计 🍅 1、queue_data.txt:保存消息的内容 🍅 2、queue_stat.txt:保存消息的统计信息 二、消息序列化 三、自定义异常类 四、创建MessageFileManger类 🍅 1、约定消息文件所在的目录和文件名…...

AI编程工具Copilot与Codeium的实测对比
csdn原创谢绝转载 简介 现在没有AI编程工具,效率会打一个折扣,如果还没有,赶紧装起来. GitHub Copilot是OpenAi与github等共同开发的的AI辅助编程工具,基于ChatGPT驱动,功能强大,这个没人怀疑…...

webpack基础知识六:说说webpack的热更新是如何做到的?原理是什么?
一、是什么 HMR全称 Hot Module Replacement,可以理解为模块热替换,指在应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个应用 例如,我们在应用运行过程中修改了某个模块,通过自动刷新会导致…...

Linux从安装到实战 常用命令 Bash常用功能 用户和组管理
1.0初识Linux 1.1虚拟机介绍 1.2VMware Workstation虚拟化软件 下载CentOS; 1.3远程链接Linux系统 &FinalShell 链接finalshell半天没连接进去 他说ip adress 看IP地址是在虚拟机上 win11主机是 终端输入: ifconfig VMware虚拟机的设置 & ssh连接_snge…...

webpack基础知识三:说说webpack中常见的Loader?解决了什么问题?
一、是什么 loader 用于对模块的"源代码"进行转换,在 import 或"加载"模块时预处理文件 webpack做的事情,仅仅是分析出各种模块的依赖关系,然后形成资源列表,最终打包生成到指定的文件中。如下图所示&#…...

深度学习:Pytorch常见损失函数Loss简介
深度学习:Pytorch常见损失函数Loss简介 L1 LossMSE LossSmoothL1 LossCrossEntropy LossFocal Loss 此篇博客主要对深度学习中常用的损失函数进行介绍,并结合Pytorch的函数进行分析,讲解其用法。 L1 Loss L1 Loss计算预测值和真值的平均绝对…...

【Android-java】Parcelable 是什么?
Parcelable 是 Android 中的一个接口,用于实现将对象序列化为字节流的功能,以便在不同组件之间传递。与 Java 的 Serializable 接口不同,Parcelable 的性能更高,适用于 Android 平台。 要实现 Parcelable 接口,我们需…...

Spring整合MyBatis小实例(转账功能)
实现步骤 一,引入依赖 <!--仓库--><repositories><!--spring里程碑版本的仓库--><repository><id>repository.spring.milestone</id><name>Spring Milestone Repository</name><url>https://repo.spring.i…...

List集合的对象传输的两种方式
说明:在一些特定的情况,我们需要把对象中的List集合属性存入到数据库中,之后把该字段取出来转为List集合的对象使用(如下图) 自定义对象 public class User implements Serializable {/*** ID*/private Integer id;/*…...

海外媒体发稿:软文写作方法方式?一篇好的软文理应合理规划?
不同种类的软文会有不同的方式,下面小编就来来给大家分析一下: 方法一、要选定文章的突破点: 所说突破点就是这篇文章文章软文理应以什么样的视角、什么样的见解、什么样的语言设计理念、如何文章文章的标题来写。不同种类的传播效果&#…...

【秋招】算法岗的八股文之机器学习
目录 机器学习特征工程常见的计算模型总览线性回归模型与逻辑回归模型线性回归模型逻辑回归模型区别 朴素贝叶斯分类器模型 (Naive Bayes)决策树模型随机森林模型支持向量机模型 (Support Vector Machine)K近邻模型神经网络模型卷积神经网络(CNN)循环神经…...

为什么list.sort()比Stream().sorted()更快?
真的更好吗? 先简单写个demo List<Integer> userList new ArrayList<>();Random rand new Random();for (int i 0; i < 10000 ; i) {userList.add(rand.nextInt(1000));}List<Integer> userList2 new ArrayList<>();userList2.add…...

SQL账户SA登录失败,提示错误:18456
错误代码 18456 表示 SQL Server 登录失败。这个错误通常表示提供的凭据(用户名和密码)无法成功验证或者没有权限访问所请求的数据库。以下是一些常见的可能原因和解决方法: 1.错误的凭据:请确认提供的SA账户的用户名和密码是否正…...

Linux 终端操作命令(1)
Linux 命令 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应功能的英文单词或单词的缩写[-options]:选项,可用来对命令进行控制,也可以省略parameter:传给命令的参…...

java与javaw运行jar程序
运行jar程序 一、java.exe启动jar程序 (会显示console黑窗口) 1、一般用法: java -jar myJar.jar2、重命名进程名称启动: echo off copy "%JAVA_HOME%\bin\java.exe" "%JAVA_HOME%\bin\myProcess.exe" myProcess -jar myJar.jar e…...

安装和配置 Home Assistant 教程 HACS Homkit 米家等智能设备接入
安装和配置 Home Assistant 教程 简介 Home Assistant 是一款开源的智能家居自动化平台,可以帮助你集成和控制各种智能设备,从灯光到温度调节器,从摄像头到媒体播放器。本教程将引导你如何在 Docker 环境中安装和配置 Home Assistant&#…...

解决 Android Studio 的 Gradle 面板上只有关于测试的 task 的问题
文章目录 问题描述解决办法 笔者出问题时的运行环境: Android Studio Flamingo | 2022.2.1 Android SDK 33 Gradle 8.0.1 JDK 17 问题描述 笔者最近发现一个奇怪的事情。笔者的 Android Studio 的 Gradle 面板上居然除了用于测试的 task 之外,其它什…...

安全杂记 - 复现nodejs沙箱绕过
目录 一. 配置环境1.下载nodejs2.nodejs配置3.报错解决方法 二. nodej沙箱绕过1. vm模块2.使用this或引用类型来进行沙箱绕过 一. 配置环境 1.下载nodejs 官网:https://nodejs.org/en2.nodejs配置 安装nodejs的msi文件,默认配置一直下一步即可&#x…...

信息安全事件分类分级指南
范围 本指导性技术文件为信息安全事件的分类分级提供指导,用于信息安全事件的防范与处置,为事前准备、事中应对、事后处理 提供一个基础指南,可供信息系统和基础信息传输网络的运营和使用单位以及信息安全主管部门参考使用。 术语和定义 下…...

Vue系列第八篇:echarts绘制柱状图和折线图
本篇将使用echarts框架进行柱状图和折线图绘制。 目录 1.绘制效果 2.安装echarts 3.前端代码 4.后端代码 1.绘制效果 2.安装echarts // 安装echarts版本4 npm i -D echarts4 3.前端代码 src/api/api.js //业务服务调用接口封装import service from ../service.js //npm …...

SQL-每日一题【1164. 指定日期的产品价格】
题目 产品数据表: Products 写一段 SQL来查找在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。 以 任意顺序 返回结果表。 查询结果格式如下例所示。 示例 1: 解题思路 1.题目要求我们查找在 2019-08-16 时全部产品的价格,假设所…...

memcpy、memmove、memcmp、memset函数的作用与区别
一、memcpy与memmove 1、memcpy 作用:从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意: memcpy() 函数在遇到 ’\0’ 的时候不会停下来(strcpy字符串拷贝函数在遇到’\0’的时候会停下来);destination和source…...