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 已经启动。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C 语言高级3--函数指针回调函数,预处理,动态库的封装

目录 1.函数指针和回调函数 1.1 函数指针 1.1.1 函数类型 1.1.2 函数指针(指向函数的指针) 1.1.3 函数指针数组 1.1.4 函数指针做函数参数(回调函数) 2.预处理 2.1 预处理的基本概念 2.2 文件包含指令(#include) 2.2.1 文件包含处理 2.2.2 #incude<>和#include&q…

基于Jenkins+Python+Ubuntu+Docker的接口/UI自动化测试环境部署详细过程

基于JenkinsPythonUbuntuDocker的接口/UI自动化测试环境部署详细过程 1 Jenkins是什么&#xff1f;2 Jenkins目标是什么&#xff1f;3 什么是CI/CD?3.1 CI持续集成3.2 CD持续部署3.3 CD持续交付 4 Ubuntu环境4.1 环境需求4.2 实现思路 5 Ubuntu下安装Docker6 安装Jenkins6.1 拉…

Linux Day06

目录 一、printf输出问题 二、复制进程fork 2.1进程 2.2 pid_t fork(void); 注意&#xff1a; 2.3逻辑地址和物理地址 2.4写时拷贝技术 一、printf输出问题 printf 函数并不会直接将数据输出到屏幕&#xff0c;而是先放到缓冲区中&#xff0c;只有一下三种情况满 足&a…

24考研数据结构-第五章:树与二叉树

目录 第五章&#xff1a;树5.1树的基本概念5.1.1树的定义5.1.2 基本术语5.1.3 树的性质 5.2二叉树的概念5.2.1 二叉树的定义与特性5.2.2 几种特殊的二叉树5.2.3 二叉树的性质5.2.4 完全二叉树的性质5.2.5 二叉树的存储结构1. 顺序存储重要的基本操作非完全二叉树2. 链式存储逆向…

【Paper】2020_网络化多智能体系统的事件触发一致性研究_徐勇

徐勇. 网络化多智能体系统的事件触发一致性研究[D].浙江大学,2020.DOI:10.27461/d.cnki.gzjdx.2020.001385. 文章目录 5 已知 DoS 攻击策略下多智能体系统的事件触发安全一致性分析5.1 引言5.2 数学模型与问题描述5.3 控制器和事件触发条件的设计5.5 数值仿真程序 Main.m程序 M…

使用FreeMarker导出word文档(支持导出图片)

今天跟大家分享一下工作中比较实用的导出word 带图片的功能。 对于在idea开发中我们需要引入以下依赖&#xff1a; 2.对于eclipse 开发我们需要进入对应的jar包 这个必须放在lib下&#xff0c;同样也需要在当前项目的环境是加入该依赖 需要在MEAT-INF加入 首先制定word 导出…

UE5 半透明覆层材质

文章目录 前言介绍示例1示例2示例3 前言 本文采用虚幻5.2.1版本演示&#xff0c;介绍半透明覆层材质&#xff08;覆层材质&#xff09;。 介绍 半透明覆层材质是 UE5.1 版本 更新的功能&#xff0c;使用半透明覆层材质&#xff0c;可以轻松的给物体表面附着一层材质。 在UE5…

Python3 处理PDF之PyMuPDF 入门

PyMuPDF 简介 PyMuPDF是一个用于处理PDF文件的Python库&#xff0c;它提供了丰富的功能来操作、分析和转换PDF文档。这个库的设计目标是提供一个简单易用的API,使得开发者能够轻松地在Python程序中实现PDF文件的各种操作。 PyMuPDF的主要特点如下&#xff1a; 跨平台兼容性&a…

Aspose.Imaging for Python via .NET Crack

Aspose.Imaging for Python via .NET Crack Aspose.Imaging for Python via.NET是一个提供高级图像处理功能的库。您可以使用此API轻松创建、加载、操作、转换或压缩图像。另外&#xff0c;Aspose.Imaging for Python通过.NET支持绘图和使用图形基元。图像导出和转换-API的核心…

SpringCloud(29):Nacos简介

1 什么是配置中心 1.1 什么是配置 应用程序在启动和运行的时候往往需要读取一些配置信息&#xff0c;配置基本上伴随着应用程序的整个生命周期&#xff0c;比如&#xff1a;数据库连接参数、启动参数等。 配置主要有以下几个特点&#xff1a; 配置是独立于程序的只读变量 …

编译LightGBM错误处理记录

在LightGBM源码中新建文件夹build&#xff0c;然后在build目录下运行命令 cmake -A x64 -DUSE_GPU1 -DBOOST_ROOTC:\local\boost_1_82_0 -DBOOST_LIBRARYDIRC:\local\boost_1_82_0\lib64-msvc-14.3 .. 报错 错误原因&#xff1a; miniconda3\Library\lib\cmake\中boost版本是…

状态模式(State)

状态模式是一种行为设计模式&#xff0c;允许一个对象在其内部状态改变时改变它的行为&#xff0c;使其看起来修改了自身所属的类。其别名为状态对象(Objects for States)。 State is a behavior design pattern that allows an object to change its behavior when its inter…

前端个人年度工作述职报告(二十篇)

前端个人年度工作述职报告篇1 尊敬的各位领导、各位同仁&#xff1a; 大家好!按照20__年度我公司就职人员工作评估的安排和要求&#xff0c;我认真剖析、总结了自己的工作情况&#xff0c;现将本人工作开展情况向各位领导、同仁做以汇报&#xff0c;有不妥之处&#xff0c;希…

【前瞻】视频技术的发展趋势讨论以及应用场景

视频技术的发展可以追溯到19世纪初期的早期实验。到20世纪初期&#xff0c;电视技术的发明和普及促进了视频技术的进一步发展。 1&#xff09;数字化&#xff1a;数字化技术的发明和发展使得视频技术更加先进。数字电视信号具有更高的清晰度和更大的带宽&#xff0c;可以更快地…

ospf减少LSA更新

实验及实验要求 一、思路 1.根据区域划分IP地址 2.使公网可通---写缺省 3.使R3成为MGRE中心站点&#xff0c;R5、R6、R7为分支站点 4.一个个去配置ospf区域和RIP区域&#xff0c;确保每个区域配置无误 5.区域0要更改OSPF在接口的工作类型为broadcast &#xff0c;并使R3为…

【C++】容器篇(五)—— map和set的基本介绍

序言&#xff1a; 在之前&#xff0c;我们已经对STL中的 序列式容器 进行了相关的学习。本期&#xff0c;我将给大家介绍的则是另外一类容器 —— 关联式容器 &#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;容器回顾 &#x1f4a8;【顺序容器】 &a…

【二进制安全】堆漏洞:Double Free原理

参考&#xff1a;https://www.anquanke.com/post/id/241598 次要参考&#xff1a;https://xz.aliyun.com/t/6342 malloc_chunk 的源码如下&#xff1a; struct malloc_chunk { INTERNAL_SIZE_T prev_size; /*前一个chunk的大小*/ INTERNAL_SIZE_T size; /*当前chunk的…

无涯教程-Perl - binmode函数

描述 此函数设置在区分两者的操作系统上以二进制形式读取和写入FILEHANDLE的格式。非二进制文件的CR LF序列在输入时转换为LF,在LF时在输出时转换为CR LF。这对于使用两个字符分隔文本文件中的行的操作系统(MS-DOS)至关重要,但对使用单个字符的操作系统(Unix,Mac OS,QNX)没有影…

C#中XML文档与Treeview控件操作的数据同步

在前文《C#使用XML和Treeview结合实现复杂数据采集功能》中&#xff0c;使用Treeview展示了XML的数据&#xff0c;问题是如果在Treeview上进行了操作&#xff0c;怎样同步更改XML数据的内容呢&#xff1f; 这个问题看似简单&#xff0c;实现起来有一点小麻烦。 要实现的操作功能…

6.s081/6.1810(Fall 2022)Lab2: System calls

文章目录 前言其他篇章参考链接0. 前置准备1. System call tracing (moderate)1.1 简单分析1.2 Hint 11.3 Hint 21.4 Hint 31.5 Hint 41.6 Hint 51.7 测试 2. Sysinfo (moderate)2.1 声明2.2 实现2.2.1 框架2.2.2 用户态与内核态交互2.2.3 计算空闲内存的大小2.2.4 计算非UNUSE…