在Linux上将 `.sh` 脚本、`.jar` 包或其他脚本文件添加到开机自启动

在Linux上将 .sh 脚本、.jar 包或其他脚本文件添加到开机自启动

在Linux环境中,有时需要将一些程序、脚本或应用程序设置为开机时自动启动。这对于那些需要在系统启动时启动的服务或应用非常有用。本文将介绍如何将 .sh 脚本、.jar 包或其他脚本文件添加到Linux系统的开机自启动中。

1. 使用 systemd 设置开机自启动

systemd 是大多数现代Linux发行版(如Ubuntu 16.04+、CentOS 7+等)的初始化系统。通过 systemd,可以将脚本、程序或服务添加到开机自启动中。

步骤 1:创建一个自定义的服务文件
  1. 打开终端,创建一个新的 systemd 服务文件。通常,这些服务文件存放在 /etc/systemd/system/ 目录下。

    sudo nano /etc/systemd/system/my-script.service
    
  2. 在服务文件中,写入如下内容:

    [Unit]
    Description=My Custom Script Service
    After=network.target[Service]
    ExecStart=/bin/bash /path/to/your/script.sh
    WorkingDirectory=/path/to/your/directory
    User=your-username
    Group=your-group
    Restart=always
    StandardOutput=journal
    StandardError=inherit[Install]
    WantedBy=multi-user.target
    

    解释:

    • [Unit] 部分定义服务的描述和依赖关系(如 After=network.target 表示在网络服务启动后再启动此脚本)。
    • [Service] 部分指定要执行的命令,ExecStart 用来指定脚本的路径。
    • WorkingDirectory 指定脚本执行的工作目录。
    • UserGroup 用来指定运行脚本的用户和用户组(选填)。
    • Restart=always 表示如果脚本退出,将会自动重启脚本。
    • [Install] 部分定义服务在哪个目标下运行,multi-user.target 表示多用户环境下启动。

systemd 服务文件中,TypeRestartRestartSecLimitNOFILEPrivateTmp 是常用的参数配置选项。每个选项都有特定的用途和行为。下面是这些参数的详细解释和可选项:

  1. Type
    Type 用于定义服务的启动类型,指定 systemd 如何识别和管理服务进程。常见的选项有:
  • simple
    默认类型。systemd 假设服务是一个简单的前台进程,启动后会一直运行,直到退出。适用于大多数服务。

  • forking
    如果服务是一个父进程(通常是守护进程),并在启动时会分叉(即父进程退出,而子进程继续运行),则应使用 forking。在这种模式下,systemd 会等待服务的父进程退出并认为它已启动完毕,实际上是监视子进程。

  • oneshot
    适用于一次性任务,在启动时运行并且立即完成。systemd 不会持续监控此服务的状态。

  • notify
    如果服务使用 sd_notify()systemd 发送通知以指示其已启动或完成,使用 notify 类型。服务需要主动通知 systemd 启动状态。

  • idle
    服务在 systemd 的空闲时间启动,适用于延迟启动任务。

  1. Restart
    Restart 用于指定服务崩溃后的重启策略。常用的选项包括:
  • no
    不会在服务崩溃后自动重启,这是默认设置。

  • always
    无论服务是正常退出还是异常退出,都会尝试重新启动服务。

  • on-failure
    只有在服务非正常退出时(即退出码非零)才会重启。适用于希望在服务崩溃时自动重启,但正常退出时不重启的情况。

  • on-abort
    只有在服务因信号退出(通常是 SIGABRT 或其他致命信号)时才会重启。

  • unless-stopped
    服务会在失败时重启,除非用户手动停止服务。

  1. RestartSec
    RestartSec 用来配置在尝试重启服务之前等待的时间(秒)。这对于防止服务崩溃后立即重启非常有用,尤其是在服务可能需要一段时间来恢复或解决问题时。
  • 示例:设置重启间隔为10秒。
    RestartSec=10
    
  1. LimitNOFILE
    LimitNOFILE 设置服务进程可以打开的最大文件描述符数量。Linux 系统中,进程能够打开的文件、套接字等资源数量是有限制的,适当增加此限制可以提高某些服务(如数据库服务、Web 服务器等)的性能,尤其是在高并发场景下。
  • 示例:设置允许打开的最大文件描述符为 65535。
    LimitNOFILE=65535
    
  1. PrivateTmp
    PrivateTmp 用来控制服务是否使用独立的临时目录。启用此选项时,服务会使用独立于系统默认临时目录(如 /tmp/var/tmp)的临时空间,这样可以提高服务的安全性,防止其他进程访问其临时文件。
  • true
    启用独立的临时目录。

    PrivateTmp=true
    
  • false
    禁用独立的临时目录,服务使用系统默认的临时目录。

    PrivateTmp=false
    
步骤 2:重新加载 systemd 配置并启用服务
  1. 保存文件后,重新加载 systemd 配置并启用服务:

    sudo systemctl daemon-reload
    sudo systemctl enable my-script.service
    
  2. 启动服务:

    sudo systemctl start my-script.service
    
  3. 检查服务的状态:

    sudo systemctl status my-script.service
    

此时,脚本将在每次系统启动时自动执行。

2. 使用 crontab 设置开机自启动

除了 systemdcron 是另一种常用的定时任务调度工具。你可以使用 cron 来设置系统开机时执行某个任务。

步骤 1:编辑 crontab 文件
  1. 使用 crontab 编辑器打开 cron 配置文件:

    crontab -e
    
  2. 在文件末尾添加如下行,以便在系统启动时执行脚本:

    @reboot /path/to/your/script.sh
    
  3. 如果你需要在脚本中启动 .jar 文件,可以使用类似的命令:

    @reboot java -jar /path/to/your/application.jar
    
  4. 保存并退出编辑器。

步骤 2:验证 cron 服务是否运行

确保 cron 服务正在运行,以便系统启动时可以执行任务:

sudo systemctl status cron

如果服务未启动,可以使用以下命令启动它:

sudo systemctl start cron

3. 使用 /etc/rc.local 文件设置开机自启动

在一些较老的Linux发行版中,可以通过编辑 /etc/rc.local 文件来设置开机自启动任务。

步骤 1:编辑 rc.local 文件
  1. 打开 /etc/rc.local 文件:

    sudo nano /etc/rc.local
    
  2. 在文件的 exit 0 行之前添加你希望开机启动的命令:

    /path/to/your/script.sh &
    
  3. 确保脚本命令末尾有一个 & 符号,这样脚本将在后台运行。

  4. 保存并退出编辑器。

步骤 2:赋予执行权限

确保 rc.local 文件具有执行权限:

sudo chmod +x /etc/rc.local

4. 使用 init.d 脚本设置开机自启动

init.d 脚本是传统的Linux开机启动方式,但在现代系统中,systemd 已经取代了它。不过,如果你使用的是较旧的Linux版本,依然可以使用 init.d 脚本来设置开机启动。

步骤 1:创建 init.d 脚本
  1. /etc/init.d/ 目录下创建脚本文件:

    sudo nano /etc/init.d/myscript
    
  2. 编写脚本内容:

    #!/bin/bash
    # Description: My custom script
    # Start the script
    /path/to/your/script.sh
    
  3. 赋予脚本执行权限:

    sudo chmod +x /etc/init.d/myscript
    
步骤 2:启用服务

将脚本添加到开机启动项:

sudo update-rc.d myscript defaults

总结

在Linux中,可以通过多种方法设置脚本、.jar 文件或其他程序在系统启动时自动运行。使用 systemd 是目前推荐的方式,因为它提供了更多的灵活性和控制。如果系统不支持 systemd,则可以选择使用 cron 或传统的 rc.localinit.d 脚本。

无论选择哪种方法,都应确保脚本或程序路径正确,权限设置得当,并且服务能够正确启动。

希望本文帮助你理解如何在Linux上设置脚本或程序的开机自启动!

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

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

相关文章

使用Idea自带的git功能进行分支合并

文章目录 1.背景描述2.分支切换3.分支合并的具体操作4.将在local环境下,从dev合并到qas分支上的代码,推送到远端 1.背景描述 目前在开发的当前项目有四个分支,master(主分支)、pre(预生产分支)、qas(测试分支)、dev(开发分支); …

EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay 3

Assignment 6Beta SprintCourseEE308FZ[A] — Software EngineeringClass Link2401_MU_SE_FZURequirementsTeamwork—Beta SprintTeam NameFZUGOObjectiveSprint Essay 3_Day5-Day6 (12.15-12.16)Other Reference1. WeChat Mini Program Design Guide 2. Javascript Style Guid…

凯酷全科技抖音电商服务的卓越践行者

在数字经济蓬勃发展的今天,电子商务已成为企业增长的新引擎。随着短视频平台的崛起,抖音作为全球领先的短视频社交平台,不仅改变了人们的娱乐方式,也为品牌和商家提供了全新的营销渠道。厦门凯酷全科技有限公司(以下简…

架构信息收集(小迪网络安全笔记~

附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 2.2 架构信息收集 引子:一个Web应用的构成,由诸多组件&服务相结合,而域名仅是处于Web架构中最表…

一.photoshop导入到spine

这里使用的是 photoshoptospine脚本 下载地址:https://download.csdn.net/download/boyxgb/90156744 脚本的使用,可以通过文件的脚本的浏览,浏览该脚本使用该脚本,也可以将该脚本放在photoshop安装文件夹里的script文件夹下,具体路径:Photoshop\Presets\Scripts,重启photosho…

Mapbox-GL 的源码解读的一般步骤

Mapbox-GL 是一个非常优秀的二三维地理引擎,随着智能驾驶时代的到来,应用也会越来越广泛,关于mapbox-gl和其他地理引擎的详细对比(比如CesiumJS),后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…

SparkSQL运行架构及原理

文章目录 SparkSQL运行架构及原理1.1. Catalyst优化器简介1.2. SparkSQL运行架构1.3. SparkSQL解析Core底层原理1.4. 执行计划查看 SparkSQL运行架构及原理 1.1. Catalyst优化器简介 SparkSQL使得我们开发人员可以使用DSL风格的数据来处理数据,甚至可以直接使用SQ…

大数据-254 离线数仓 - Airflow 任务调度 核心交易调度任务集成

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop&#xff0…

昇思25天学习打卡营第33天|共赴算力时代

文章目录 一、平台简介二、深度学习模型2.1 处理数据集2.2 模型训练2.3 加载模型 三、共赴算力时代 一、平台简介 昇思大模型平台,就像是AI学习者和开发者的超级基地,这里不仅提供丰富的项目、模型和大模型体验,还有一大堆经典数据集任你挑。…

Docker 镜像加速和配置的分享 云服务器搭建beef-xss

前言 最近很多的docker镜像加速都鸡鸡了 找点资源是越来越不容易了 什么事docker 因为我是个业余的人 我简单的说 docker就是比如我们的软件商店的 下载 docker镜像(之前就是我们在服务器上搭建网站 和环境的很费力费时 之后就有了这个 镜像 :这…

浅谈怎样系统的准备前端面试

前言 创业梦碎,回归现实,7 月底毅然裸辞,苦战两个月,拿到了美团和字节跳动的 offer,这算是从业以来第一次真正意义的面试,遇到蛮多问题,比如一开始具体的面试过程我都不懂,基本一直是…

告别机器人味:如何让ChatGPT写出有灵魂的内容

目录 ChatGPT的一些AI味道小问题 1.提供编辑指南 2.提供样本 3.思维链大纲 4.融入自己的想法 5.去除重复增加多样性 6.删除废话 ChatGPT的一些AI味道小问题 大多数宝子们再使用ChatGPT进行写作时,发现我们的老朋友ChatGPT在各类写作上还有点“机器人味”太重…

【长城杯】Web题 hello_web 解题思路

查看源代码发现路径提示 访问…/tips.php显示无用页面,怀疑…/被过滤,采用…/./形式,看到phpinfo()页面 注意到disable_functions,禁用了很多函数 访问hackme.php,看到页面源码 发现eval函数,包含base64 解密获得php代…

Windows部署Docker及PostgreSQL数据库相关操作

一、Windows安装Docker 1.wsl安装 以管理员身份启动命令行,运行:wsl --install; 安装结束后,重启电脑,以管理员身份启动命令行,运行:wsl --install -d Ubuntu; 中间需要输入用户名…

HTML零基础入门教学

目录 一. HTML语言 二. HTML结构 三. HTML文件基本结构 四. 准备开发环境 五. 快速生成代码框架 六. HTML常见标签 6.1 注释标签 6.2 标题标签:h1-h6 6.3 段落标签:p 6.4 换行标签:br 6.5 格式化标签 6.6 图片标签&a…

Springboot应用开发:工具类整理

目录 一、编写目的 二、映射工具类 2.1 依赖 2.2 代码 三、日期格式 3.1 依赖 3.2 代码 四、加密 4.1 代码 五、Http请求 5.1 依赖 5.2 代码 六、金额 6.1 代码 七、二维码 7.1 依赖 7.2 代码 八、坐标转换 8.1 代码 九、树结构 9.1 代码 9.1.1 节点 9.1…

libaom 源码分析:熵编码模块介绍

AV1 熵编码原理介绍 关于AV1 熵编码原理介绍可以参考:AV1 编码标准熵编码技术概述libaom 熵编码相关源码介绍 函数流程图 核心函数介绍 av1_pack_bitstream 函数:该函数负责将编码后的数据打包成符合 AV1 标准的比特流格式;包括写入序列头 OBU 的函数 av1_write_obu_header…

一个开源的自托管虚拟浏览器项目,支持在安全、私密的环境中使用浏览器

大家好,今天给大家分享一个开源的自托管虚拟浏览器项目Neko,旨在利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器,为用户提供安全、私密且多功能的浏览体验。 项目介绍 Neko利用 WebRTC 技术在 Docker 容器中运行虚拟浏览器,提供…

【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程,必须以管理员身份运行此实时调试器。是否调试该进程?

【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程,必须以管理员身份运行此实时调试器。是否调试该进程? 目录一、前言二、具体原因三、解决方法 目录 报错截图 一、前言 进行应用程序开发时,需要对w3wp进行附加调试等场景&#xff…

Docker--Docker Registry(镜像仓库)

什么是Docker Registry? 镜像仓库(Docker Registry)是Docker生态系统中用于存储、管理和分发Docker镜像的关键组件。 镜像仓库主要负责存储Docker镜像,这些镜像包含了应用程序及其相关的依赖项和配置,是构建和运行Doc…