Linux通过Crontab实现自启动的全流程

 更新时间:2025年09月18日 10:22:30   作者:白大锅  
Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令,本文主要记录通过crontab实现当服务器宕机或服务意外停止时进行自动重启,需要的朋友可以参考下

前言

本文主要记录通过crontab实现当服务器宕机或服务意外停止时进行自动重启

一、Crontab实现重启流程

1.配置阶段

1.1.任务定义​​

用户通过crontab -e编辑任务文件,按分钟 小时 日 月 周 命令格式编写规则(如*/1 * * * * /opt/script.sh表示每1分钟执行一次脚本)

1.2.特殊符号说明

* :匹配所有值
,:多值分隔(如1,3,5表示1、3、5分钟)
-:范围(如0-6表示0到6点)
/:间隔(如*/10表示每10分钟)

1.3.正则简介

1.3.1.基本元字符

元字符说明示例
. 匹配任意单个字符(除换行符 \n)a.c → abc, a@c
\d匹配数字(等价于 [0-9])\d\d → 42
\D匹配非数字(等价于 [^0-9])\D+ → abc
\w匹配单词字符(字母、数字、下划线)\w+ → user_1
\W匹配非单词字符(如 !, @)\W → !
\s匹配空白字符(空格、制表符 \t、换行符 \n 等)a\sb → a b
\S匹配非空白字符\S+ → Hello
[…]匹配括号内的任意一个字符[aeiou] → a, e
[^…]匹配不在括号内的任意字符[^0-9] → a, !

1.3.2.量词(重复匹配)

量词说明示例
*匹配前一个字符 0 次或多次a*b → b, aaab
+匹配前一个字符 1 次或多次a+b → ab, aaab
?匹配前一个字符 0 次或 1 次a?b → b, ab
{n}匹配前一个字符 恰好 n 次a{3} → aaa
{n,}匹配前一个字符 至少 n 次a{2,} → aa, aaa
{n,m}匹配前一个字符 n 到 m 次a{2,4} → aa, aaa

1.3.3.位置锚点

锚点说明示例
^匹配字符串的开始^Hello → Hello world 中的 Hello
$匹配字符串的结束world$ → Hello world 中的 world
\b匹配单词边界\bcat\b → cat(不匹配 category)
\B匹配非单词边界\Bcat\B → category 中的 cat

1.3.4.分组与捕获

语法说明示例
(…)捕获分组,提取匹配内容(ab)+ → abab(捕获 ab)
(?:…)非捕获分组,仅分组不捕获(?:ab)+ → abab(不捕获)
|或逻辑,匹配左侧或右侧cat
\1, \2反向引用,引用捕获的分组(\d)\1 → 11, 22

1.3.5.零宽断言(高级匹配)

断言说明示例
(?=…)正向先行断言,匹配后面是 … 的位置\d+(?=px) → 2(在 2px 中)
(?!..)负向先行断言,匹配后面不是 … 的位置\d+(?!px) → 3(在 3em 中)
(?<=…)正向后行断言,匹配前面是 … 的位置(?<=$)\d+ → 100(在 $100 中)
(?<!..)负向后行断言,匹配前面不是 … 的位置(?<!$)\d+ → 50(在 €50 中)

1.3.6.常见用例

① 邮箱验证

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
匹配:user@example.com
不匹配:user@.com

② URL 提取

https?://[^\s/$.?#].[^\s]*
匹配:https://example.com/path

③ 日期匹配(YYYY-MM-DD)

^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
匹配:2023-12-31
不匹配:2023-13-40

④ 手机号(中国大陆)

^1[3-9]\d{9}$
匹配:13812345678

1.3.7.正则表达式修饰符

修饰符说明示例
i忽略大小写/hello/i → Hello
g全局匹配(匹配所有结果)/a/g → a a a 中的 3 个 a
m多行模式(^ 和 $ 匹配每行的开头/结尾)/^a/m → 匹配多行中的 a

1.4.正式配置

步骤一:

执行 crontab -e命令

步骤二:
点击字母“i” 输入下方指令:

方案一:监听端口 每隔X时间去判断是否启动状态:

*/1 * * * * source /etc/profile && ss -ntpl |grep 8080 |grep -v grep || sh /启动脚本完整路径/启动脚本.sh 后面跟启动脚本的完整启动命令

输入后 点击“esc” 点击后点击“ crtl + : ”, 输入wq保存退出。

方案二:每天定时重启(晚上10点):

0 22 * * * source /etc/profile && cd /启动脚本完整路径 && sh /启动脚本完整路径/脚本.sh restart 后面跟启动脚本的完整启动命令

配置完成保存后可通过crontab -l命令验证

1.5.任务执行流程​​

时间匹配​​

crond每分钟遍历所有任务,对比当前时间与任务的时间表达式

环境加载​

执行时继承系统环境变量(如PATH),建议脚本内显式加载/etc/profile或~/.bash_profile

任务执行

执行对应监听任务

二、Crontab命令详解

2.1.基本命令

命令说明
crontab -e编辑当前用户的 cron 任务表(使用默认编辑器,如 vim 或 nano)
crontab -l列出当前用户的所有 cron 任务
crontab -r删除当前用户的所有 cron 任务(谨慎使用,无确认!)
crontab -u <用户名> -e编辑指定用户的 cron 任务(需 root 权限)
crontab -u <用户名> -l列出指定用户的 cron 任务
crontab -u <用户名> -r删除指定用户的所有 cron 任务

2.2.查看 cron 日志(调试)

2.2.1.系统日志(检查 cron 是否执行):

grep CRON /var/log/syslog      # Ubuntu/Debian
grep CRON /var/log/cron        # CentOS/RHEL

2.2.2.如果任务未执行,检查服务是否运行:

systemctl status cron          # Ubuntu/Debian
systemctl status crond         # CentOS/RHEL

2.3.Cron 时间格式

编辑 crontab -e 时,每行任务格式如下:

* * * * * <要执行的命令>

2.3.1.五个时间字段的含义(从左到右):

分钟(0-59)
小时(0-23)
日期(1-31)
月份(1-12)
星期(0-7,0 和 7 均代表周日)

2.3.2.特殊符号:

*:任意值(每分钟/每小时等)
,:分隔多个时间(如 1,15 * * * * 表示每小时的 1 分和 15 分)
-:范围(如 10-20 * * * * 表示每小时的 10 到 20 分)
*/n:每隔 n 单位(如 */5 * * * * 表示每 5 分钟)

2.4.示例

1.每天凌晨 3 点执行脚本
0 3 * * * /path/to/script.sh
2.每 5 分钟执行一次
*/5 * * * * /path/to/command
3.每周一和周五的下午 5:30 发送邮件
30 17 * * 1,5 /usr/bin/sendmail -t < /tmp/email.txt
4.每月 1 号的凌晨 1 点重启服务
0 1 1 * * systemctl restart nginx

2.5.注意事项

1.环境变量问题:cron 默认使用最小环境变量,建议在脚本中使用绝对路径或提前设置 PATH。

2.输出处理:cron 任务的输出会以邮件发送给用户,如需忽略输出:

* * * * * /path/to/command >/dev/null 2>&1

3.权限限制:普通用户只能编辑自己的 cron 任务,root 可管理其他用户的任务。

2.6.备份与恢复

2.6.1.备份

crontab -l > ~/cron_backup.txt

2.6.2.恢复

crontab ~/cron_backup.txt

以上就是Linux通过Crontab实现自启动的全流程的详细内容,更多关于Linux Crontab自启动的资料请关注脚本之家其它相关文章!

相关文章

  • 浅析Hyper-V安装CentOS 8问题

    浅析Hyper-V安装CentOS 8问题

    这篇文章主要介绍了Hyper-V安装CentOS 8问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Linux中RPM文件操作的常用命令总结

    Linux中RPM文件操作的常用命令总结

    这篇文章主要给大家介绍了关于Linux中RPM文件操作的常用命令,文中通过示例介绍的很详细,对大家的理解和学习很有帮助,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • Linux解决Unknown filesystem问题

    Linux解决Unknown filesystem问题

    当Linux系统出现「Unknown filesystem」错误,通常是GRUB引导问题,首先在GRUB命令行输入ls查看信息,记录返回的分区信息,使用PE系统,如「微PE」,并利用「显示隐藏分区」工具查看所有分区,在文件资源管理器中找到「boot」文件夹所在的分区
    2024-10-10
  • Linux使用logrotate来切割日志文件

    Linux使用logrotate来切割日志文件

    本篇文章主要介绍了Linux使用logrotate来切割日志文件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Linux中SELinux三种模式的启动、关闭与查看方式

    Linux中SELinux三种模式的启动、关闭与查看方式

    这篇文章主要介绍了Linux中SELinux三种模式的启动、关闭与查看方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • LINUX Centos7搭建vsftpd服务

    LINUX Centos7搭建vsftpd服务

    本文给大家详细讲述了在LINUX中Centos7搭建vsftpd服务的详细操作方法,需要的朋友参考下。
    2018-02-02
  • linux 磁盘转移空间的方法

    linux 磁盘转移空间的方法

    本篇文章主要介绍了linux 磁盘转移空间的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 教你如何搭建一个安全的Linux服务器教程

    教你如何搭建一个安全的Linux服务器教程

    在当前很多php程序都使用了linux服务器,因为php在linux下运行效果更佳,很多大网站采用了linux服务器
    2012-04-04
  • Linux和window环境下开放防火墙端口的操作

    Linux和window环境下开放防火墙端口的操作

    开发时会遇到在服务器上部署mysql或者es数据库的情况,此时如果访问数据库就需要开放防火墙端口,本文会讲解windows和linux环境下端口的开放,文章通过图文结合的方式讲解的非常详细,需要的朋友可以参考下
    2024-09-09
  • Linux命令之mkdir 和 touch详解

    Linux命令之mkdir 和 touch详解

    这篇文章要讲的是两个命令,mkdir 和 touch 命令。前一个命令是操作目录的,后一个命令是操作文件的,文中介绍的非常详细,需要的朋友可以参考下
    2023-06-06

最新评论