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

Linux的例行性工作(crontab)

crontab服务

  • at 命令是在指定的时间只能执行一次任务, crontab 命令可以循环重复的执行定时任务,Windows 中的计划任务有些类似
  • crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,在安装完成操 作系统后,默认会安装 crond 服务工具,且 crond 服务默认就是自启动的,若需要安装则执行如 下命令:

[root@server ~]# yum install crontabs # 安装,注意包名

[root@server ~]# systemctl status crond # 查看状态

  •  crond 进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务,crontab 命令需要 crond 服务支持 

  • linux 任务调度的工作主要分为以下两类
    • 系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
    • 个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信, 这些工作可由每个用户自行设置

crontab工作过程

  • 当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入 的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高
  • 当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令
  • crontab 执行的每一项工作都会被 记录到 /var/log/cron 这个日志文件中
  • 当用户使用 crontab 新建工作之后,该项工作就会被记录到 /var/spool/cron/目录里面

crontab命令详解

格式

crontab [-u   user]  [ -l  | -r  | -e ]

参数

执行 crontab 命令就是在修改 /var/spool/cron 中的定时任务文件。

编辑crontab

格式:

[root@server ~]# crontab -e

写入的命令格式:每一行书写一个工作,每个工作共有 6 个字段

*/5 6-8 * 8 1 /bin/bash /test.sh

特殊字符

实验1:编写脚本test1.sh

[root@server ~]# vim test1.sh

#!/bin/bash

while :

do

                echo "this is my test sh"$(date) >> /root/cro.txt

                sleep 1

done

设置循环性周期性任务

[root@server ~]# crontab -e

*/1 * * * *     sh      /root/test1.sh

注意:crond服务是自动启动的,crontab命令只要保存退出后就会生效

查看任务:

[root@server ~] # crontab    -l
*/1 * * * *       sh       /root/test.sh

删除任务:

[root@server ~] # crontab   -r # 删除
[root@server ~] # crontab   -l # 查看列表
no  crontab   for   root
最后还是需要终止循环进程
[root@server ~] # ps    -aux |  grep   test1
[root@server ~] # kill    进程号

实验2:设置邮件发送告警功能,每1分钟发送一封邮件

先进行一下邮箱设置

 

在生成授权码之后,我们记得把授权码保存下来

安装邮件服务

[root@server ~]# yum  install   mailx  -y

配置邮件服务

[root@server ~]# vim  /etc/mail.rc

# 最后一行添加以下内容:

set  from=fox_andy007@126.com

set  smtp=smtp.126.com

set  smtp-auth-user=fox_andy007@126.com

set  smtp-auth-password="NYgwVuvWDTAp5Fek"

set  smtp-auth=login

# 注意:该文件输入完毕有的系统需要强制保存退出,输入wq

测试邮件服务

[root@server ~]# echo  "testmail "  | mail  -s   "testmail"   fox_andy007@126.com

设置定时任务

[root@server ~]# crontab  -e

MAILTO=fox_andy007@126.com

* * * * *   echo   "警告,SERVER服务器内存较低,速处理" | mail -v -s "告警邮件"

fox_andy007@126.com

书写定时任务的注意事项
  • 6 个字段都不能为空,如果不确定则使用*表示任意时间
  • crontab命令任务的最小时间单位为分钟,最大有效时间为月,如:2024年某时执行、33030秒这样的时间日期无法被识别
  • 定义时间时,日期和星期最好不要一起出现,由于都是以天为单位,非常让管理员混淆
  • 在定时任务中不能,不管是写命令还是在脚本中写命令,最好都用绝对路径,相对路径有时会报错

系统级别的计划任务

crond 服务除了会在工作时查看 /var/spool/cron 文件夹下的定时任务文件以外,还会查看

/etc/cron.d 目录。而在 /etc/anacrontab 文件里面存放每天、每周、每月需要执行的系统任

务。

[root@server ~] #  ls  -l   /etc/ | grep cron*

cron.d                          # 系统定时任务

cron.daily                    # 每天的任务

cront.deny                  # 定时任务黑名单

cron.hourly                # 每小时执行的任务

cron.monthly            # 每月的定时任务

crontab                    # 定义任务管理文件

cron.weekly            # 每周的定时任务

crontab  -e 时每个用户都可以执行的命令,但有时定时任务必须由系统执行,此时就需要编

/etc/crontab配置文件来实现

主配置文件:

[root@server ~]# vim  /etc/crontab

仅能通过root定义,不可以使用普通账户身份去执行计划任务

方法:在/etc/crontab 最后一行新增计划任务即可

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# For  details  see  man  4  crontabs

# Example of job definition:

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR

sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

分析

  • SHELL=/bin/bash : 指定系统使用那个shell解释器去执行
  • PATH=/sbin:/bin:/usr/sbin:/usr/bin : 系统执行命令的搜索路径
  • MAILTO=root : 表示执行任务的信息通过邮件发送给谁
  • user-name : 表示执行命令的用户是谁
1:编写脚本testcrontab.sh,将时间写入/t1.txt文件中,每周二11点循环执行

[root@server ~]# vim testcrontab.sh

#!/bin/bash

date >> /t1.txt

[root@server ~]# vim /etc/crontab

0 11 * * 2 root /bin/bash /root/testcrontab.sh

2:每天6:00点将日志/var/log/messages 文件备份到/backup目录中,备份后的日志文件名修改为logfileYYYY-MM-DD-HH:MM:SS

[root@server ~]# mkdir /backup # 新建目录

[root@server ~]# vim /etc/crontab # 编辑系统计划任务

0 6 * * * root /bin/cp /var/log/messages /backup/logfile`date +\%Y-\%m-

\%d-\%H:\%M:\%S`

# 注意:可以使用* * * * * 进行测试

# 反引号`` 表示将引起的内容识别为命令

# crontab系统中%表示换行,需要增加转义符\

http://www.xdnf.cn/news/183097.html

相关文章:

  • 码蹄杯——tips
  • MAGI-1: Autoregressive Video Generation at Scale
  • 基于Jamba模型的天气预测实战
  • java工具类
  • Redis哨兵模式深度解析:实现高可用与自动故障转移的终极指南
  • 大语言模型架构基础与挑战
  • 简单了解Java的I/O流机制与文件读写操作
  • 智能电网新引擎:动态增容装置如何解锁输电线路潜力?
  • spark学习总结
  • C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 14)
  • Java大厂面试:互联网医疗场景中的Spring Boot与微服务应用
  • 第42周:文献阅读
  • 杭州小红书代运营公司-品融电商:专业赋能品牌社交增长
  • Java + Spring Boot + MyBatis获取以及持久化sql语句的方法
  • 单片机之间的双向通信
  • 可视化图解算法: 二叉搜索树转双向排序链表
  • Spdlog 日志组件的安装及使用
  • 【C语言】程序分配的区域
  • spring框架学习(下)
  • 现场问题排查-postgresql某表索引损坏导致指定数据无法更新影响卷宗材料上传
  • Java异常处理全面指南:从基础到高级实践
  • (done) 吴恩达版提示词工程 6. 转换 (翻译,通用翻译,语气风格变换,文本格式转换,拼写检查和语法检查)
  • 关于定时任务原理
  • Python实例题:Python气象数据分析
  • 猿人学web端爬虫攻防大赛赛题第15题——备周则意怠-常见则不疑
  • Linux Centos8使用yum命令安装mysql8
  • 《100天精通Python——基础篇 2025 第9天:字典操作全解析与哈希原理揭秘》
  • SAE 实现应用发布全过程可观测
  • 将你的本地项目发布到 GitHub (新手指南)
  • 00-算法打卡-目录