循环执行的例行性任务--crontab(周期性)

crontd服务

  • 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]  
参数
参数解释示例
-llist 查看定时任务crontab -l
-eedit 编辑定时任务,建议手动编辑crontab -e
-i删除定时任务,提示用户确认删除,避免出错crontab -i
-r删除定时任务,移除/var/spool/cron/username文件crontab -r
-u user指定用户执行任务,root 可以管理普通用户计划任务crontab -u redhat -l

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

编辑crontab
  • 格式:

[root@server ~]# crontab  -e
  • 写入的命令格式:每一行书写一个工作,每个工作共有6个字段

代表意义分钟小时日期月份星期命令
数字范围0-590-231-311-120-7(0和7表示周日)执行的动作
*/5 6-8 * 8 1  /bin/bash  /test.sh
特殊字符
特使字符含义
*任意时刻
-表示时间范围
,(逗号)分割时段
*/数字指定时间间隔的频率,如:每3分钟执行一次,*/3
时间含义
1 2 * * *每天凌晨2点零1分执行动作
0 17 * * 1每周一下午17点整执行动作
0 5 1,15 * *每月的1号和5号凌晨5点执行动作
40 4 * * 1-5每周1到周5的凌晨4点40分执行动作
*/10 4 * * *每天凌晨4点每隔10分钟执行动作
3,15 8-11 */2 * *每隔2天的上午8点到11点的第3分钟和第15分钟执行动作
* * * * *每个1分钟执行一次动作
实验4
  • 编写脚本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  进程号
实验5
  • 让系统在每周1凌晨6点重启一次

[root@server ~]# crontab  -e
0 6 * * 1  /sbin/shutdown  -r now
实验6
  • 设置邮件发送告警功能,每1分钟发送一封邮件

  • 安装邮件服务

[root@server ~]# yum  install  mailx  -y
  • 配置邮件服务

[root@server ~]# vim  /etc/mail.rc
# 最后一行添加以下内容:
set  from=17674044@qq.com
set  smtp=smtp.qq.com
set  smtp-auth-user=17674044@qq.com
set  smtp-auth-password=do***cvqdubqbibj
set  smtp-auth=login
​
# 注意:该文件输入完毕有的系统需要强制保存退出,输入wq!
  • 测试邮件服务

[root@server ~]# echo  "testmail"  |  mail  -s  "testmail"  17674044@qq.com
  • 设置定时任务

[root@server ~]# crontab  -e
MAILTO=17674044@qq.com
​
* * * * *   echo  "警告,SERVER服务器内存较低,速处理"  |  mail -v -s  "告警邮件"  17674044@qq.com  
书写定时任务的注意事项
  • 6 个字段都不能为空,如果不确定则使用*表示任意时间

  • crontab命令任务的最小时间单位为分钟,最大有效时间为月,如:2024年某时执行、3点30分30秒这样的时间日期无法被识别

  • 定义时间时,日期和星期最好不要一起出现,由于都是以天为单位,非常让管理员混淆

  • 在定时任务中不能,不管是写命令还是在脚本中写命令,最好都用==绝对路径==,相对路径有时会报错

系统级别的计划任务

  • 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系统中%表示换行,需要增加转义符\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值