在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/ 目录下。

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

    ini 复制代码
    [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秒。

    ini 复制代码
    RestartSec=10
  1. LimitNOFILE
    LimitNOFILE 设置服务进程可以打开的最大文件描述符数量。Linux 系统中,进程能够打开的文件、套接字等资源数量是有限制的,适当增加此限制可以提高某些服务(如数据库服务、Web 服务器等)的性能,尤其是在高并发场景下。
  • 示例 :设置允许打开的最大文件描述符为 65535。

    ini 复制代码
    LimitNOFILE=65535
  1. PrivateTmp
    PrivateTmp 用来控制服务是否使用独立的临时目录。启用此选项时,服务会使用独立于系统默认临时目录(如 /tmp/var/tmp)的临时空间,这样可以提高服务的安全性,防止其他进程访问其临时文件。
  • true

    启用独立的临时目录。

    ini 复制代码
    PrivateTmp=true
  • false

    禁用独立的临时目录,服务使用系统默认的临时目录。

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

    bash 复制代码
    sudo systemctl daemon-reload
    sudo systemctl enable my-script.service
  2. 启动服务:

    bash 复制代码
    sudo systemctl start my-script.service
  3. 检查服务的状态:

    bash 复制代码
    sudo systemctl status my-script.service

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

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

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

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

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

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

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

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

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

bash 复制代码
sudo systemctl status cron

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

bash 复制代码
sudo systemctl start cron

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

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

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

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

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

  4. 保存并退出编辑器。

步骤 2:赋予执行权限

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

bash 复制代码
sudo chmod +x /etc/rc.local

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

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

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

    bash 复制代码
    sudo nano /etc/init.d/myscript
  2. 编写脚本内容:

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

    bash 复制代码
    sudo chmod +x /etc/init.d/myscript
步骤 2:启用服务

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

bash 复制代码
sudo update-rc.d myscript defaults

总结

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

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

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

相关推荐
yuanbenshidiaos2 分钟前
linux-----进程及基本操作
linux·服务器·网络
关关钧17 分钟前
【Linux】处理用户输入
linux·运维·服务器
small陀螺18 分钟前
linux应用编程(点亮LED)
linux·运维·服务器
开心工作室_kaic24 分钟前
springboot460实习生管理系统设计和实现(论文+源码)_kaic
运维·服务器·前端·数据库·vue.js
zhou周大哥38 分钟前
linux 无网络安装mysql
linux·运维·mysql
豆芽脚脚1 小时前
python打包exe文件
linux·开发语言·python
请你喝好果汁6411 小时前
机器学习架起了组学科学和植物育种之间的桥梁。
linux·人工智能·机器学习
helloasimo1 小时前
CentOS下,离线安装vscode的步骤;
linux·运维·centos
Mr.kanglong2 小时前
【Linux】进程间关系与守护进程
linux·运维·服务器
yuanbenshidiaos2 小时前
linux-----常用指令
linux·运维·服务器