当前位置: 首页 > news >正文

在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上设置脚本或程序的开机自启动!

相关文章:

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

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

[Maven]构建项目与高级特性

有关于安装配置可以看我的另一篇文章:Maven下载安装配置与简介。 构建项目的生命周期和常用命令 这一节的内容熟记即可,要用了认得出来即可。 在Maven出现之前,项目构建的生命周期就已经存在。对项目进行清理、编译、测试、部署等一系列工作…...

【系统架构设计师】真题论文: 论数据分片技术及其应用(包括解题思路和素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2020年 试题1)解题思路论文素材参考Hash 分片原理一致性 Hash 分片原理按照数据范围(Range Based)分片原理项目采用的分片方式的实现过程和效果真题题目(2020年 试题1) 数据分片就是按照一定的规则…...

【bWAPP】XSS跨站脚本攻击实战

别低头&#xff0c;皇冠会掉&#xff1b;别流泪&#xff0c;贱人会笑。 0x01、XSS - Reflected (GET) Low 输入的内容直接输出到页面中: 后台服务端没有对输入的参数进行过滤, 构造一个注入xss payload即可: <script>alert(1)</script> 成功弹窗 Medium 审查…...

Ubuntu 22.04,Rime / luna_pinyin.schema 输入法:外挂词库,自定义词库 (****) OK

测试平台: Ubuntu 22.04 sudo apt install ibus-rime 实例 1 :不实用的 实例 2 :实用的 文件使用说明:已经内嵌在文件中了。 ====================================== 实例 1 :不实用的 一共需要 3 个文件,放在用户文件夹下:~/.config/ibus/rime/ # Test A @ Fi…...

多协议视频监控汇聚/视频安防系统Liveweb搭建智慧园区视频管理平台

智慧园区作为现代化城市发展的重要组成部分&#xff0c;不仅承载着产业升级的使命&#xff0c;更是智慧城市建设的重要体现。随着产业园区竞争的逐渐白热化&#xff0c;将项目打造成完善的智慧园区是越来越多用户关注的内容。 然而我们往往在规划前期就开始面临众多难题&#…...

如何高效获取Twitter数据:Apify平台上的推特数据采集解决方案

引言 在数据分析和市场研究领域&#xff0c;Twitter&#xff08;现在的X&#xff09;数据一直是重要的信息来源。但是&#xff0c;自从Twitter更改API定价策略后&#xff0c;获取数据的成本大幅提升。本文将介绍一个经济实惠的替代方案。 为什么需要Twitter数据&#xff1f; …...

第二部分:进阶主题 15 . 安全管理 --[MySQL轻松入门教程]

MySQL 数据库的安全管理是一个多方面的工作,涉及到了解和配置数据库的访问控制、加密、备份与恢复策略、日志记录等多个方面。以下是一些关键点: 1. 用户权限管理 最小权限原则:每个用户应该只被授予完成其工作所需的最低限度的权限。定期审查权限:定期检查用户的权限,确…...

力扣hot100——双指针

283. 移动零 class Solution { public:void moveZeroes(vector<int>& nums) {for (int i 0, j 0; j < nums.size() || i < nums.size(); j) {if (j > nums.size()) {nums[i] 0;continue;}if (nums[j]) nums[i] nums[j];}} }; 双指针&#xff0c;一个指…...

【代码随想录day58】【C++复健】 117. 软件构建(拓扑排序);47. 参加科学大会(dijkstra(朴素版)精讲)

117. 软件构建&#xff08;拓扑排序&#xff09; 继续边看解析边做题&#xff0c;思考时的问题做个如下的总结&#xff1a; 1. 存边用什么数据结构&#xff1f; 在题目中&#xff0c;我们需要存储节点之间的依赖关系&#xff08;边信息&#xff09;。选择适合的数据结构非常重…...

【NLP 16、实践 ③ 找出特定字符在字符串中的位置】

看着父亲苍老的白发和渐渐老态的面容 希望时间再慢一些 —— 24.12.19 一、定义模型 1.初始化模型 ① 初始化父类 super(TorchModel, self).__init__()&#xff1a; 调用父类 nn.Module 的初始化方法&#xff0c;确保模型能够正确初始化。 ② 创建嵌入层 self.embedding n…...

费解的开关(bfs + 哈希表 or 递推)

题目描述: 25盏灯排成一个5x5的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。 我们用数字“1”表示一盏开着的灯,用数字“0”表示关…...

C语言——实现求出最大值

问题描述&#xff1a;利用C语言自定义函数求出一维数组里边最大的数字 //利用函数找最大数#include<stdio.h>int search(int s[9]) //查找函数 {int i , max s[0] , max_xia 0;for(i0;i<9;i){if(s[i] > max){max_xia i;max s[max_xia];}}return max; } in…...

基于微信小程序的短视频系统(SpringBoot)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

Flutter 中 Sliver 的各种装饰器介绍与使用

在 Flutter 中&#xff0c;Sliver 是一种可以在滚动视图中实现自定义效果的组件。Sliver 组件可以根据滚动位置动态改变其外观和行为。本文将介绍几种常用的 Sliver 装饰器及其使用方法。 1. SliverAppBar SliverAppBar 是一个可以随着滚动而变化的应用栏。它可以在用户向下滚…...

电感的基本概念

电感的定义&#xff1a; 电感一般是由导线绕成空芯线圈或带铁芯的线圈而制成。 当线圈中有电流通过时&#xff0c;线圈周围就会产生磁场&#xff0c;当线圈中流过的是直流电流时&#xff0c;线圆周围就会产生固定的磁场&#xff0c;线圈产生的物理现象就是电磁铁&#xff0c;当…...

linux基于systemd自启守护进程 systemctl自定义服务傻瓜式教程

系统服务 书接上文: linux自启任务详解 演示系统:ubuntu 20.04 开发部署项目的时候常常有这样的场景: 业务功能以后台服务的形式提供,部署完成后可以随着系统的重启而自动启动;服务异常挂掉后可以再次拉起 这个功能在ubuntu系统中通常由systemd提供 如果仅仅需要达成上述的场…...

HTTP协议和接口测试详解

介绍接口测试前我们先来介绍一下HTTP协议&#xff0c;为什么先要介绍HTTP协议呢因为因为我们做接口测试其实就是用测试工具&#xff08;postman,fiddler,jmeter等等&#xff09;或代码来模拟用户使用软件的场景&#xff0c;在我们模拟的时候不像平时功能测试时我们有已经开发完…...

vue3【实战】定义全局方法(两种方案)

以全局方法 calculate 为例 src/utils/calculate.ts export default {sum: function (a: number, b: number) {return a b} }方案1&#xff1a; 依赖注入 provide inject main.ts import calculate from ./utils/calculateapp.provide(calculate, calculate)页面中 // esl…...

基于JavaScript的DBUtils增删改查操作实验

1、实验目的 学习和掌握数据库连接池的配置与管理。使用DBUtils进行增删改查操作。按照步骤&#xff0c;掌握并实现使用DBUtils实现增删改查的全过程。 2、实验所用方法 上机实践 3、实验步骤及截图 创建一个数据库表&#xff0c;使用下面sql语句创建数据库表并插入数据&#x…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...