Linux 下设置开机自启动的方法

文章目录

  • 事先准备
  • 对于普通的 Linux
  • 对于 RedHat Enterprise Linux 9

笔者的运行环境:

  • 设置成功过的 Linux:

    • RedHat Enterprise Linux 9 x86_64

    • CentOS 8 x86_64

事先准备

  1. 进行这个教程之前,必须要先安装好一个 Linux 操作系统。这个 Linux 操作系统可以安装在虚拟机中,也可以安装在真实的电脑中。关于这方面的内容,可见笔者的其它博客:

    各种操作系统安装教程大全:
    https://blog.csdn.net/wangpaiblog/article/details/115436520

    为了方便远程输入命令、将文件加入到 Linux 操作系统中,最好还要在一台 Windows 操作系统上面使用一种终端控制软件,如 Xshell、Xftp 等。关于这方面的内容,可见笔者的另一篇博客:

    如何在 Windows 主机上访问本地局域网中的 Linux 主机:
    https://blog.csdn.net/wangpaiblog/article/details/120052152

  2. 本文主要针对一些离线免安装的应用。很多应用在安装会自动设置开机启动,对这种应用不需要设置开机启动。联网应用在启动后会占用端口号,如果想验证这种应用有没有启动,可以使用如下命令。

    netstat -na | grep 该应用的端口号

    如果输出了该应用的端口号被使用的信息,说明该应用已经启动。

对于普通的 Linux

  1. 这种方法适用于一些有 Linux 的启动目录 init.d 的 Linux。对本方法而言,读者需要先提供一种供开机启动的脚本,不妨设为 myapp


    【踩坑提醒】

      此脚本中不能使用 Linux 的环境变量。Linux 的环境变量一般在文件 /etc/profile 中设置,而文件 /etc/profile 是在每一个用户登录 Shell 时才会读取的。在 Linux 启动之时此文件中的环境变量不会起作用。因此,如果需要使用 Linux 的环境变量,请将环境变量直接定义在此脚本开头。


  2. 将此脚本移动或复制到 Linux 的启动目录 init.d 中,然后对其添加执行权限。

    chmod +x /etc/rc.d/init.d/myapp

  3. 设置 myapp 开机自启动。

    chkconfig myapp on

  4. 输入以下命令验证是否成功设置了 myapp 开机自启动:

    chkconfig --list

    如果输出结果含 myapp,且 3、4、5 值均为 ,说明设置成功。输出如下所示:

    myapp 0:关 1:关 2:开 3:开 4:开 5:开 6:关

  5. 重启电脑试一下是否真正成功。输入以下命令重启电脑:

    reboot

    重启后,马上输入以下命令:

    netstat -na | grep 该应用的端口号

    如果输出了端口号被使用的信息,说明 myapp 开机自启动成功。

对于 RedHat Enterprise Linux 9

  1. 对于一些较新的 Linux,它没有提供上面的启动目录 init.d,而是改为使用服务来启动,这样设计要规范一些。对于使用服务来启动,需要编写一个 .service 文件放置在目录 /etc/systemd/system 下,并使用 systemctl 命令来控制这个服务。

    对本方法而言,读者需要先提供一些关于应用启动、停止等命令。

  2. 使用如下命令在目录 /etc/systemd/system 下创建一个关于 myapp 的 .service 文件。

    touch /etc/systemd/system/myapp.service

  3. 编辑该文件,在其中写入如下内容。

    [Unit]
    Description=myapp-server
    After=network.target[Service]
    ExecStart=应用启动命令
    ExecReload=应用重新加载命令
    ExecStop=应用停止命令
    PrivateTmp=true
    Type=forking[Install]
    WantedBy=multi-user.target
    

    【说明】

    1. 对于 [Unit]

      • Description:描述该服务的文字说明。

      • Documentation:关于该服务的相关文档的URL。

      • Requires:指定该服务所依赖的其他服务,如果这些服务没有运行,那么该服务也不会启动。

      • Wants:指定该服务所希望依赖的其他服务,但不会影响该服务的启动。

      • After:指定该服务应在哪些其他服务启动之后再启动。

      • Before:指定该服务应在哪些其他服务启动之前启动。

      • Conflicts:指定该服务与哪些其他服务冲突,如果这些服务之一正在运行,那么该服务将不会启动。

      • BindsTo:指定该服务与哪些其他服务绑定,如果这些服务之一停止运行,那么该服务也会停止。

      • PartOf:指定该服务是哪个服务的一部分,如果该服务停止运行,那么整个服务也会停止。

    2. 对于 [Service]

      • 上面的部分以 Exec 开头属性代表着某个命令 systemctl 命令关键字 myapp。对应关系如下:

        • ExecStart:启动服务的命令,对应 systemctl start myapp

        • ExecStop:停止服务的命令,对应 systemctl stop myapp

        • ExecReload:重新加载服务的命令,对应 systemctl reload myapp

          重新加载服务并不是重启服务。重新加载通常用于重新加载服务的配置文件或重新加载某些资源,以便服务可以在不中断运行的情况下应用更改。

      • 也有一些以 Exec 开头的属性需要提供相应的脚本,但它们没有对应的命令 systemctl 命令关键字 myapp

        • ExecStartPre:在启动服务之前执行的命令。

        • ExecStartPost:在启动服务之后执行的命令。

        • ExecStopPre:在停止服务之前执行的命令。

        • ExecStopPost:在停止服务之后执行的命令。

      • 其它属性:

        • Type:指定服务的类型,可以是simpleforkingoneshotdbusnotify等。

        • WorkingDirectory:指定服务的工作目录。

        • User:指定服务运行的用户。

        • Group:指定服务运行的用户组。

        • Restart:指定服务在退出后是否自动重启,可以是noon-successon-failureon-abnormalon-abortalways等。

        • RestartSec:指定服务重启之间的延迟时间。

        • Environment:指定服务的环境变量。

        • ExecStartPre:指定在服务启动之前要执行的命令或脚本。

        • ExecStartPost:指定在服务启动之后要执行的命令或脚本。

        • ExecStopPre:指定在服务停止之前要执行的命令或脚本。

        • ExecStopPost:指定在服务停止之后要执行的命令或脚本。

    3. 对于 [Install]

      • WantedBy: 指定服务所属的目标(target),即服务应该在哪个目标中启动。可以指定为一个或多个目标,多个目标之间用空格分隔。例如,WantedBy=multi-user.target表示服务应该在multi-user.target目标中启动。

      • RequiredBy: 指定服务所需的目标(target),即服务应该在哪个目标中必须启动。与WantedBy类似,可以指定为一个或多个目标,多个目标之间用空格分隔。

      • Also: 指定其他服务的安装选项。可以指定为一个或多个服务名称,多个服务之间用空格分隔。例如,Also=other.service表示在安装当前服务时,也同时安装other.service

    4. 补充:

      • 有些命令没有对应的属性,如 systemctl restart myapp。该重启命令相当于停止和启动命令的组合(如果服务如果未启动会直接执行启动命令,如果已启动会先执行停止再启动)。

    【注意】

    1. 上面的命令必需使用该命令的全路径。不能因为前面在文件 /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
      
    2. 上面的某些属性不是必要的,如果没有对应的命令,可以省略(但启动命令不能省略),但省略之后就不能使用与该属性相关联的命令。比如,如果应用没有定义重新加载命令,则属性 ExecReload 可以省略,但同时不能使用命令 systemctl reload myapp


  4. 关闭 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,将其中的属性 enforcingenforcing 改为 disabled。然后重启 Linux 即可。

    在这里插入图片描述

  5. 依次输出以下命令设置 myapp 开机自启动:

    systemctl daemon-reload

    systemctl enable myapp.service

  6. 重启电脑试一下是否真正成功。输入以下命令重启电脑:

    reboot

    重启后,马上输入以下命令:

    netstat -na | grep 该应用的端口号

    如果输出了端口号被使用的信息,说明 myapp 已经启动。

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

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

相关文章

JavaWeb 手写Tomcat底层机制

目录 一、Tomcat底层整体架构 1.简介 : 2.分析图 : 3.基于Socket开发服务端的流程 : 4.打通服务器端和客户端的数据通道 : 二、多线程模型的实现 1.思路分析 : 2.处理HTTP请求 : 3.自定义Tomcat : 三、自定义Servlet规范 1. HTTP请求和响应 : 1 CyanServletRequest …

《面试1v1》ElasticSearch基础

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

工厂方法模式

工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种统一的接口来创建对象,但将对象的实例化延迟到子类中。工厂模式主要解决了对象的创建过程与使用客户端代码的解耦,使得客户端代码不需要知道具体的对象创建…

Kafka的配置和使用

目录 1.服务器用docker安装kafka 2.springboot集成kafka实现生产者和消费者 1.服务器用docker安装kafka ①、安装docker(docker类似于linux的软件商店,下载所有应用都能从docker去下载) a、自动安装 curl -fsSL https://get.docker.com | b…

Visual Studio配置PCL库

Visual Studio配置PCL库 Debug和Release配置新建项目配置属性表测试参考 Debug和Release Debug和Release的配置过程一模一样,唯一区别就在于最后一步插入的附加依赖项不同,因此下面以debug为例。 配置新建项目 1、新建一个C空项目,模式设置…

Linux文本三剑客之awk

目录 前言 awk 1.认识awk 2.使用awk 2.1语法 2.2常用命令选项 2.3awk变量 2.3.1内置变量 2.3.2自定义变量 2.4printf命令 awk例题 前言 awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是…

3维空间下按平面和圆柱面上排版设计

AR空间中将若干平面窗口排列在指定平面或圆柱体面上 平面排版思路 指定平面方向向量layout_centre ,平面上的一点作为排版版面的中心layout_position float3 layout_position = float3(0,0,-10); float3 layout_centre = float3(0,0,1

FreeRTOS源码分析-9 互斥信号量

目录 1 优先级翻转问题 2 互斥信号量概念及其应用 2.2FreeRTOS互斥信号量介绍 2.3FreeRTOS互斥信号量工作原理 3 互斥信号量函数应用 3.1功能分析 3.2API详解 3.3功能实现 4 递归互斥信号量函数应用 4.1死锁现象 ​编辑 4.2API详解 4.3解决死锁 5 互斥信号量实现原…

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig与zag/左右双旋/3+4重构)

本文目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 06.代码注意插入算法删除算法完整代码&#xff1a…

通过有名管道实现AB进程对话

一、要求实现AB进程对话 A进程先发送一句话给B进程&#xff0c;B进程接收后打印B进程再回复一句话给A进程&#xff0c;A进程接收后打印重复1.2步骤&#xff0c;当收到quit后&#xff0c;要结束AB进程 A进程 #include <stdio.h> #include <sys/types.h> #include…

Oracle EBS OM客制化调用API创建销售订单非常慢(FND_FLEX_HASH死锁)

业务场景 由于Oracle EBS标准功的公司间关联交易操作涉及业务节点环节多,需要多个业务部门参考操作完成,浪费人力和花费时间。随着国内集团公司通过业务整合优化,大幅度减少间中很多环节的人为操作,如国内公司间贸易通过类似于客制化出货单申请方式,跨国公司间贸易通过类似…

关于接口测试用例设计的一些思考

接口测试发现的典型问题 传入参数处理不当&#xff0c;引起程序错误类型溢出&#xff0c;导致数据读取和写入不一致对象权限校验出错&#xff0c;可获取其他角色信息状态出错&#xff0c;导致逻辑处理出现问题逻辑校验不完善定时任务执行出错 接口测试用例设计 接口测试用例…

redis入门3-在java中操作redis

Redis的java客户端 Jedis、Lettuce、Redisson、以及spring提供的spring data redis Jedis操作redis //添加依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.8.0</version> </dep…

JJWT快速入门

本篇介绍使用 JJWT&#xff08;Java JWT&#xff09;库来生成 JWT Token&#xff0c;步骤如下&#xff1a; 添加依赖&#xff1a; 在项目中添加 JJWT 依赖项。对于 Maven 项目&#xff0c;可以在 pom.xml 文件中添加以下依赖项&#xff1a; <dependency><groupId>…

python解析帆软cpt及frm文件(xml)获取源数据表及下游依赖表

#!/user/bin/evn python import os,re,openpyxl 输入&#xff1a;帆软脚本文件路径输出&#xff1a;帆软文件检查结果Excel#获取来源表 def table_scan(sql_str):# remove the /* */ commentsq re.sub(r"/\*[^*]*\*(?:[^*/][^*]*\*)*/", "", sql_str)# r…

ssh免密rsa登录

1. 本地要执行ssh的机器 ssh-keygen -t rsa # 下面为对应密钥生成地址 公钥&#xff08;id_rsa.pub&#xff09;和私钥&#xff08;id_rsa&#xff09;。 # windows: C:\Users\<your_username>\.ssh # linux: /home/service/.ssh 2. 讲密钥写入到对应文…

基于Hyperledger Fabric+CP-ABE加密的溯源类应用系统

加密机制中有ABE属性加密&#xff0c;属性基加密一般又分为两类&#xff0c;即密钥策略属性基加密&#xff08;KP-ABE&#xff09;和密文策略属性基加密&#xff08;CP-ABE&#xff09;。 今天我们重点说一下cp-abe及如何与fabric区块链技术相结合来建设相关溯源、确权、认证等…

秋招算法备战第39天 | 62.不同路径、63. 不同路径 II

62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 按照动态规划五部曲走&#xff0c;非常清晰 class Solution:def uniquePaths(self, m: int, n: int) -> int:dp [[0 for _ in range(n)] for _ in range(m)]for i in range(m):dp[i][0] 1for j in range(n):dp[0][…

c++学习(特殊类设计)[30]

只能在堆上创建对象的类 如果你想要确保对象只能在堆上创建&#xff0c;可以通过将析构函数声明为私有&#xff0c;并提供一个静态成员函数来创建对象。这样&#xff0c;类的实例化只能通过调用静态成员函数来完成&#xff0c;而无法直接在栈上创建对象。 以下是一个示例&…

【开源项目--稻草】Day03

【开源项目--稻草】Day03 1. 续Spring-Security1.1 自定义登录界面 2. 用户注册2.1 将注册页面显示2.2 编写控制器进行测试2.3 编写注册业务逻辑2.4 注册功能的收尾 3. VUE3.1 VUE的基本使用3.1.1 什么是VUE 3.2 使用VUEAjax完善稻草问答的注册功能 1. 续Spring-Security 1.1 …