当前位置: 首页 > 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系统中%表示换行,需要增加转义符\

相关文章:

  • 自动驾驶(ADAS)领域常用数据集介绍
  • Windows 安装 Yarn 的教程
  • 4.2.2 MySQL索引原理以及SQL优化
  • LangChain构建大模型应用之RAG
  • java-mybatis01
  • 大模型时代的具身智能:从虚拟到现实的智能体进化革命
  • 用Python做有趣的AI项目 2:用 Python 和 NLTK 构建一个聊天机器人
  • 深度解析如何将图像帧和音频片段特征高效存储到向量数据库 Milvus
  • 深入浅出JVM - Java架构师面试实战
  • 有源晶振输出匹配电阻选择与作用详解
  • Spring security详细上手教学(三)密码管理
  • 如何把握邮件发送的黄金时间?
  • 北京工业大学25计专上岸经验分享
  • Qt 中 QSQLITE 和 QODBC 数据库连接的区别
  • Java 构造器
  • 基于Pytest接口自动化的requests模块项目实战以及接口关联方法详解
  • 稳扎稳打,25西电生命科学技术学院(考研录取情况)
  • Git命令(Gitee)
  • 10 DPSK原始对话记录
  • spring项目rabbitmq es项目启动命令
  • 广州海关原党委委员、副关长刘小威被开除党籍
  • 荣盛发展去年亏损约84.43亿元,要“过苦日子、紧日子”
  • 伊朗爆炸港口已恢复货物进出口工作
  • 银川市长信箱被指乱回复:问诗词大会、答工程欠款,官方称工作失误
  • 全球首台环形CT直线加速器在沪正式开机,系我国自主研发
  • 新版国家卫生监督抽查计划发布,首次明确打击网络“医托”