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…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
