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…

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命令之一。三者的功能都是…

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…

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

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

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…

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 …

Kubespray-offline v2.21.0-1 下载 Kubespray v2.22.1 离线部署 kubernetes v1.25.6

文章目录 1. 目标2. 预备条件3. vcenter 创建虚拟机4. 系统初始化4.1 配置网卡4.2 配置主机名4.3 内核参数 5. 打快照6. 安装 git7. 配置科学8. 安装 docker9. 下载介质9.1 下载安装 docker 介质9.2 下载 kubespray-offline-ansible 介质9.3 下载 kubernetes 介质 10. 搬运介质…

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用&#xff0c;用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary&#xff0c;Count&#xff0c;Mutex&#xff1b; Mutex包…

【2种方法,jmeter用一个正则提取器提取多个值!】

jmeter中&#xff0c;用json提取器&#xff0c;一次提取多个值&#xff0c;这个很多人都会。但是&#xff0c;用正则提取器一次提取多个&#xff0c;是否可以呢&#xff1f; 肯定&#xff0c;很多人都自信满满的说&#xff0c;可以&#xff01;形如&#xff1a;token":&q…

Jenkins触发器时间、次数设定

触发器触发条件介绍 触发器触发条件公式&#xff1a;由5颗星组成 * * * * * 分别代表&#xff1a;分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6) 企业项目中常用场景介绍 场景1&#xff1a;接口脚本部分测试通过&#xff0c;部分还在进行&#xff0c;回归测试脚本执行…

Windows上安装 jdk 环境并配置环境变量 (超详细教程)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

torchvision.datasets数据加载失败

torchvision.datasets数据加载失败 如何使用torchvision.datasets进行自动下载数据失败&#xff0c;可以使用手动下载数据 Ctrl点击可以进入相关包文件&#xff0c;查找下载地址&#xff1a;https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 手动下载之后解压&#x…

企业微信小程序在调用wx.qy.login时返回错误信息qy.login:fail

原因是大概是绑定了多个企业但是在开发者工具中没有选择正确的企业 解决方法&#xff1a; 重新选择企业后即可成功获取code