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

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

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

相关文章

OpenEuler 22.03 安装 flink-1.17.2 集群

零:规划 本次计划安装三台OpenEuler 22.03 版本操作系统的服务器,用于搭建 flink 集群。这里使用flink1.17.2 的原因,是便于后续与springboot的整合 服务器名IP地址作用其他应用flink01192.168.159.133主jdk11、flink-1.17.2flink02192.168.…

[数据结构] 链表

目录 1.链表的基本概念 2.链表的实现 -- 节点的构造和链接 节点如何构造? 如何将链表关联起来? 3.链表的方法(功能) 1).display() -- 链表的遍历 2).size() -- 求链表的长度 3).addFirst(int val) -- 头插法 4).addLast(int val) -- 尾插法 5).addIndex -- 在任意位置…

20241220在荣品开发板PRO-RK3566的buildroot下适配gc2093

20241220在荣品开发板PRO-RK3566的buildroot下适配gc2093 2024/12/20 16:00 余顺?PRO-RK3566开发板 挂 gc2093模块。刷 buildroot的预编译固件。 update-pro-rk3566-buildroot-hdmi-20231130-034633.img 1、现在发现 qcamera的 拍照Capture、Record录像模式都是640x480分辨率…

实习冲刺数据库练习-01 基础查询

原题链接:牛客网在线编程_SQL篇_非技术快速入门 数据表示例: 根据数据表示例要求我们完成以下查询: (1)获取用户信息表中所有的数据,请你取出相应结果 (2)获取用户的设备id对应的…

【Mars3d】设置backgroundImage、map.scene.skyBox、backgroundImage来回切换

相关链接: http://mars3d.cn/editor-vue.html?keyex_1_2_1&idmap/other/backgroundImg 实现代码: export function show1() {map.setOptions({scene: {backgroundType: "image",backgroundImage: "url(//data.mars3d.cn/img/busin…

telnet命令检查端口

1、简介 telnet是一种用于远程登录的协议,可以通过telnet客户端连接到远程主机,并在远程主机上执行命令。 2、使用telnet命令检查端口 2.1 进入linux终端 2.2 输入telnet命令 如果没有安装telnet命令,请执行以下命令安装 sudo yum install…

Unity 根据文本宽度自动移动图像位置

游戏中有时候需要变动的显示一个物品的数量,变化的文本宽度不停的变化,这时候需要将物品的icon随着文本的长度而改变位置。 实现思路:使用Content Size Fitter来动态改变内容的大小。 首先建立一个文本组件,添加Content Size Fi…

基于Springboot人口老龄化社区服务与管理平台【附源码】

基于Springboot人口老龄化社区服务与管理平台 效果如下: 系统登陆页面 系统主页面 社区信息页面 社区文件页面 活动报名页面 走访任务管理页面 社区资讯页面 老人信息管理页面 研究背景 随着社会老龄化的加剧,老年人口比例逐渐增加,对老年…

加密数据库在现代企业中的应用实践

以下是对加密数据库在现代企业中的应用实践的详细阐述: 一、加密数据库的应用背景 随着信息技术的飞速发展,现代企业对于数据的安全性和隐私保护要求越来越高。数据库作为存储大量敏感信息的关键设施,其安全性直接关系到企业的商业利益和声誉…

安卓环境配置及打开新项目教程,2024年12月20日最新版

1.去官网下载最新的Android Studio,网址:https://developer.android.com/studio?hlzh-cn 2.下载加速器,注册账号,开启加速器。网址:放在文末。 3.下载安卓代码,项目的路径上不能有中文,特别是…

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕

20241217使用M6000显卡在WIN10下跑whisper来识别中英文字幕 2024/12/17 17:21 缘起,最近需要识别法国电影《地下铁》的法语字幕,使用 字幕小工具V1.2【whisper套壳/GUI封装了】 无效。 那就是直接使用最原始的whisper来干了。 当你重装WIN10的时候&#…

sqlite3 支持位运算 和view和 triger

数据设置条件以后可以.根据门限自动调整其他的值 由数据库记录修改时间,及记录-> 网元设备的告警产生时间,设置超时清除时间,记录系统的原始时间戳 CPp 有 sqlite 支持 json 导出字符串,json 库将字符串,映射为结构体 triger update table 更新到一个 可设置参数列表 ,view …

11-C语言结构体(下篇)

一、结构体指针变量 结构体指针变量:本质上是一个指针变量,保存的是结构体变量的地址。 1.结构体变量的地址 结构体变量的地址:对结构体变量名取地址。 代码演示 typedef struct stu {char name[32];int age;float score; }STU;int main…

linux普通用户使用sudo不需要输密码

1.root用户如果没有密码,先给root用户设置密码 sudo passwd root #设置密码 2.修改visudo配置 su #切换到root用户下 sudo visudo #修改visudo配置文件 用户名 ALL(ALL) NOPASSWD: ALL #下图所示处新增一行配置 用户名需要输入自己当前主机的用户名

百度面试手撕 go context channel部分学习

题目 手撕 对无序的切片查询指定数 使用context进行子协程的销毁 并且进行超时处理。 全局变量定义 var (startLoc int64(0) // --- 未处理切片数据起始位置endLoc int64(0) // --- 切片数据右边界 避免越界offset int64(0) // --- 根据切片和协程数量 在主线程 动态设…

任务一登录安全加固

1 (1)、(2) secpol.msc打开本地安全策略 2 (1) DCOM: 在安全描述符定义语言(SDDL)语法中的计算机访问限制 没有定义 DCOM: 在安全描述符定义语言(SDDL)语法中的计算机启动限制 没有定义 Microsoft 网络服…

无人机推流直播平台EasyDSS视频技术如何助力冬季森林防火

冬季天干物燥,大风天气频繁,是森林火灾的高发期。相比传统的人力巡查,无人机具有更高的灵敏度和准确性,尤其在夜间或浓雾天气中,依然能有效地监测潜在火源。 无人机可以提供高空视角和实时图像传输,帮助巡…

写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践

自OceanBase 4.3.3版本推出以来,向量检索的能力受到了很多客户的关注,也纷纷表达希望OB能拓展更多 多模数据库大模型 的AI应用实践。 在上篇文章 👉 OceanBase LLM,免费构建你的专属 AI 助手 ,我们介绍了如何去搭建一…

Halcon 机器视觉案例 之 药剂液面高度测量

第二篇 机器视觉案例 之 药剂液面高度测量 文章目录 第二篇 机器视觉案例 之 药剂液面高度测量1.案例要求2.实现思路2.1获得液面的位置:2.1.1 获得每支药剂的位置坐标2.1.2 根据药剂的横坐标设置卡尺工具助手找到每一个液面的位置 2.2 获得基准线的位置:…

使用k6进行MongoDB负载测试

1.安装环境 安装xk6-mongo扩展 ./xk6 build --with github.com/itsparser/xk6-mongo 2.安装MongoDB 参考Docker安装MongoDB服务-CSDN博客 连接成功后新建test数据库和sample集合 3.编写脚本 test_mongo.js import xk6_mongo from k6/x/mongo;const client xk6_mongo.new…