Linux开机启动脚本(cron 的 @reboot 特性)

news/2025/10/10 23:16:29/文章来源:https://www.cnblogs.com/mq0036/p/19134055

Linux开机启动脚本(cron 的 @reboot 特性)

cron 的 @reboot 特性是一种简洁的定时任务配置,专门用于让脚本或命令在 Linux 系统开机完成后自动执行一次,无需指定复杂的时间表达式(如 0 0 * * *),适合轻量级的开机自启需求(如启动自定义服务、初始化配置等)。

一、核心特点

  1. 触发时机:系统重启并完成基本初始化(如网络、文件系统就绪)后执行,比 rc.local 更晚,能避免依赖未就绪的问题。
  2. 用户级配置:支持不同用户独立配置(如 root 用户、普通用户),执行权限与配置用户一致,安全性更高。
  3. 无需复杂依赖:不依赖 systemdsysvinit 等初始化系统,所有支持 cron 的 Linux 系统(如 CentOS、Ubuntu、Debian)均通用。
  4. 日志可追溯:执行结果会记录到 cron 日志(如 /var/log/cron),便于排查执行失败原因。

二、使用步骤(以启动 /u01/mis/server.sh start 为例)

1. 确认 cron 服务已启动(避免服务未运行导致不触发)

  # 检查 cron 服务状态(CentOS/RHEL 用 crond,Ubuntu/Debian 用 cron)
  sudo systemctl status crond # CentOS/RHEL
  # 或
  sudo systemctl status cron # Ubuntu/Debian
   
  # 若未启动,设置开机启动并启动服务
  sudo systemctl enable --now crond # CentOS/RHEL
  # 或
  sudo systemctl enable --now cron # Ubuntu/Debian

2. 配置 @reboot 任务(两种方式:用户级、系统级)

方式 1:用户级配置(仅当前用户生效,推荐非 root 场景)
  # 编辑当前用户的 crontab(无需 sudo,仅修改自己的任务)
  crontab -e

在打开的编辑器中添加一行(指定要执行的脚本路径,建议用绝对路径):

  # 格式:@reboot 完整脚本路径(& 用于后台执行,避免阻塞 cron)
  @reboot /u01/mis/server.sh start &
  • 保存退出:按 Ctrl+O 确认保存,Ctrl+X 退出编辑器(若用 nano 编辑器)。
  • 验证配置:crontab -l 查看当前用户的 cron 任务,确认 @reboot 行已存在。
方式 2:系统级配置(所有用户生效,需 root 权限,适合全局服务)
  # 编辑系统级 cron 配置文件(需 sudo,修改后对所有用户生效)
  sudo vim /etc/crontab

在文件末尾添加一行(需指定执行用户,如 root):

  # 格式:@reboot 执行用户 完整脚本路径
  @reboot root /u01/mis/server.sh start &
  • 保存退出:Esc:wq 保存退出(vim 编辑器)。

3. 测试效果(验证开机是否自动执行)

  # 重启系统(测试关键步骤)
  sudo reboot
   
  # 重启后,检查脚本是否执行(如查看进程、日志)
  ps -ef | grep mis-back.jar # 查看脚本启动的进程
  cat /u01/mis/backEnd/logs/server.log # 查看脚本输出日志

三、常见问题与解决方案

1. @reboot 任务未执行?

  • 原因 1:脚本路径错误
    必须用 绝对路径(如 /u01/mis/server.sh),不能用相对路径(如 ./server.sh),因为 cron 执行时的默认目录是用户家目录(如 root/root)。
    解决:确认脚本路径正确,可通过 which server.shfind / -name server.sh 查找绝对路径。

  • 原因 2:环境变量缺失
    cron 执行时的环境变量极简(仅默认 PATH=/usr/bin:/bin),若脚本依赖 JAVA_HOME、自定义 PATH 等,会导致命令找不到(如 java: 未找到命令)。
    解决:在脚本开头显式定义环境变量,或在 cron 任务中指定环境变量:

      # 方案 1:在 cron 任务中添加环境变量(推荐)
      @reboot export PATH=/usr/local/java/jdk1.8.0_341/bin:$PATH && /u01/mis/server.sh start &
       
      # 方案 2:在脚本开头添加环境变量(彻底解决)
      # 在 /u01/mis/server.sh 开头添加:
      export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/java/jdk1.8.0_341/bin
      export JAVA_HOME=/usr/local/java/jdk1.8.0_341
  • 原因 3:cron 日志无记录,服务未启动
    确认 cron 服务已启动(参考步骤 1),若服务未运行,@reboot 自然不触发。

2. 脚本执行了,但进程很快退出?

  • 原因:脚本启动的程序需要后台运行(如 nohup ... &),若脚本中缺少后台执行逻辑,cron 执行完脚本后会杀死子进程。
    解决:确保脚本中启动命令包含后台运行参数(如你的 server.sh 中已用 nohup ... &,无需额外修改;若其他脚本,需补充该逻辑)。

3. 如何查看 @reboot 执行日志?

cron 执行的任务日志默认记录在系统日志中,可通过以下命令查看:

  # CentOS/RHEL:查看 cron 日志
  grep CRON /var/log/cron | tail -20
   
  # Ubuntu/Debian:查看 cron 日志(需安装 rsyslog)
  grep CRON /var/log/syslog | tail -20
  • 日志示例:Oct 11 09:00:01 CentOS CROND[1234]: (root) CMD (@reboot /u01/mis/server.sh start &),表示 @reboot 任务已触发。

四、优缺点对比(与其他自启方式)

特性cron @rebootsystemdrc.local
适用场景 轻量级脚本、用户级任务 复杂服务(需进程管理、日志) 兼容旧系统、简单命令
配置难度 简单(1行配置) 中等(需写 .service 文件) 简单(编辑 rc.local)
依赖系统 所有支持 cron 的系统 systemd 系统(CentOS7+ 等) 支持 rc.local 的系统
进程管理 无(需脚本自己处理后台) 有(自动重启、状态监控) 无(需自己处理后台)
日志追溯 依赖系统 cron 日志 自带 journalctl 日志 需手动重定向日志

总结

cron 的 @reboot 适合 简单的开机自启需求(如启动自定义脚本、初始化配置),配置快、兼容性强;若需要对服务进行精细化管理(如自动重启、状态监控),仍推荐 systemd。针对你的 server.sh 脚本,用 @reboot 配置后,重启系统即可自动触发脚本执行,无需依赖 systemd 服务文件。

 

2025-10-10 23:11:03【出处】:https://www.cnblogs.com/bcgbsh/p/19133500

=======================================================================================

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

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

相关文章

c#服务安装和卸载等等

接下来的命令是:进入其他盘符直接e: 或者d盘使用d: 然后进入debug或者release路径,cd e:\project\test1\bin\debug 然后使用命令installutil D_AssistService.exe 安装 installutil /uninstall D_AssistService.exe…

进制表示

在 C++ 中,十六进制、十进制和八进制是表示整数的三种常用进制,它们在代码中的表示形式不同 一、问题描述 在代码中,错用 报文接受的 0600 来代表 十六进制。实则0600 代表的是八进制。 //报文:68 15 00 03 00 01 …

在AI技术快速实现创意的时代,挖掘用户真实需求成为关键——某知名电池管理工具需求洞察

本文通过对某知名电池管理工具的系统分析,揭示了该工具在Apple Silicon设备上的核心功能和应用价值,同时深入挖掘了用户反馈中隐藏的功能需求和改进方向,为产品持续优化提供了重要参考。内容描述 该项目是一款专门为…

从梯度提升树到分布式机器学习算法

本文详细介绍了分布式梯度提升树算法的创新实现,通过块分布策略和Quickscorer算法优化,显著降低了大规模稀疏数据集的通信成本,并分享了从实习生到应用科学家的职业发展经验。从实习生到应用科学家:分布式机器学习…

iPhone手机越狱后出现闪退的解决方法

unc0ver7.0.2越狱工具发布以来,很多 iPhone用户都在使用自己的设备越狱,这次发布的越狱工具支持系统有: iOS11到14.5.1版本。 可是!当前越狱不如以往越狱时代那么爽,首先不要说unc0ver越狱工具依赖证书掉签(最近没…

企业推行 OKR 的 10 个关键问题

在企业管理领域,OKR(目标与关键成果法)凭借其对目标聚焦和团队协同的强大推动作用,逐渐成为众多企业的选择。然而,在实际推行过程中,不少企业会遭遇各种难题,影响 OKR 的实施效果。以下为你梳理企业推行 OKR 的…

(四)React+.Net+Typescript全栈(错误处理) - 指南

(四)React+.Net+Typescript全栈(错误处理) - 指南2025-10-10 22:58 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; di…

读《构建之法》后的六个问题

《现代软件工程》课程|个人博客作业一 先说学校的教学与师生关系 读完邹老师的《对 IT 教育的反馈》和《课程特点》,我把自己这几年最直观的感受先摊开。多数课程还是“讲授驱动”的:老师给出标准答案与“正确做法”…

自动输入小程序

打字机模拟器 一个简单的Python工具,可以将输入的文本以模拟键盘打字的形式输出到当前光标位置,直接模拟键盘按键操作。可以用于尽可以复制而不能粘贴的情况,例如某一些学习平台任务,用来提高作业完成效率。 功能特…

实用指南:基于阿里云系列平台的python微服务设计与DevOps实践

实用指南:基于阿里云系列平台的python微服务设计与DevOps实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

学习意志:“柚子曲线”与圆的交点个数的代数证明

题目 已知 \(C_1:x^2+y^2=a\),\(C_2:x^2+xy+y^2=x^4+x^3y+x^2y^2+xy^3+y^4\),求 \(|C_1 \cap C_2|\)。(By \(\text{Geometry11}\)) 解答(by \(\text{2021hych}\)) 解:考虑一个线性变换 \(\rho :\mathbb{R}^2 \to \m…

Jenkins运维之路(共享库集成流水线发布) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

使用命令行删除 Windows 网络映射驱动器

前言 不得不吐槽一下,Windows 的体验真是依托答辩 我从大学时就在喷 Windows 垃圾,没想到现在还这么烂🤣最近升级了 NAS 之前这三个网络映射盘 (W:, X:, Y:) 是通过 SMB 映射到 TKL FileServer 现在迁移到 TrueNAS…

实验报告4(使用顺序表和单链表,进行有序表的合并)

一、实验目的: 熟练使用顺序表和单链表,进行有序表的合并。 二、实验仪器或设备: 操作系统:Windows11 编程环境:Dev-cpp 5.11 三、算法总体设计 (一)使用单链表进行有序表的合并 1. 打印链表 2. 合并两个有序链表 …

20232314 2025-2026-1 《网络与系统攻防技术》实验一实验报告

1.实验内容通过修改可执行文件,改变程序执行流程,跳转到getShell函数。 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。 注入一个自己制作的shellcode并运行这段shellcode。2.实验…

详细介绍:【Windows10】MySQL9.4安装配置

详细介绍:【Windows10】MySQL9.4安装配置pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

ChatTime的一些理解

我先在 ChatTime 目录里全局搜索与“文本/时间序列/提示/特殊标记”相关的关键词,锁定模型如何区分两类输入与输出的代码位置,然后打开关键文件精读以回答你的问题。 搜索 time series|timeseries|time-series|时间序…

ChatTS的一些理解

Dingxingdi: 请你仔细阅读/workspace/ChatTS里面的文件,理解他们的含义逻辑和结构。现在我需要你告诉我,ChatTS在处理一段既包含文本又包含时间序列的输入的时候,是怎么精确地分别哪些是文本哪些是时序,从而对两者…

2025秋_9

今天依旧Java

10月10日

上午英语课学第三单元,下午写数据结构作业