Linux基础知识之:crontab定时任务

5.3 定时(计划)任务crontab

5.3.1 定时任务的概念

后台运行,到了预定的时间就会自动执行的任务,前提是需要事先手动将计划任务设定好。

  1. 周期性任务执行
  2. 清空/tmp目录下的内容
  3. mysql数据库备份
  4. Redis数据备份
5.3.2 定时任务的作用

操作系统不可能24小时都有人操作,有些时候想在指定的时间点去执行任务(例如:每天凌晨2点去重新启动Apache)此时不可能真有人夜里2点去执行命令,这就可以交给定时任务程序去执行操作

5.3.3 crontab命令语法
语法:crontab [参数]
参数 说明
-l 列出指定用户的定时任务的列表
-e 编辑指定用户的定时任务列表,简单来说,定时任务就是一个文件
-u 指定的用户名,如果不指定,则表示当前用户
-r 删除指定用户的定时任务列表
5.3.4. crontab编辑语法
SHELL=/bin/bash  #定时任务,是帮我们去执行shell语句,因此必须加上bash解释器
PATH=/sbin:/bin:/usr/sbin:/usr/bin  #crontab自己定义了PATH变量,写定时任务的命令必须是绝对路径不容易出错
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
  分 时 日  月 周

取值范围(常识):

分:0-59

时:0-23

日:1~31

月:1~12、

周:0~7、0和7表示星期天

四个字符:

* : 表示取值范围中的每一个数字

- : 做连续区间表达式的,想要表示1~2,则可以写成1-7

/ :表示每多少,例如,每10分钟一次,则可以写成 */10

, : 表示多个取值,比如在1点,2点,6点执行,则可以写成1,2,6

[!WARNING]

  1. 日期和周几不能同时写
  2. 定时任务要写绝对路径,命令的绝对路径和文件(脚本)的绝对路径
5.4.5 定时任务的编写流程
1.crontab -e 编辑定时任务

2.写入正确语法,使用绝对路径

3.crontab -l 查看定时任务

4.进行验证定时任务

5.定时任务写入后会在定时任务日志中记录,/var/spool/cron/[用户名],以用户名区分定时任务

案例236. 每月1、10、22日的4:45重启network服务

45  4  1,10,22  *  *  /user/bin/systemctl restart network

案例237. 每周六、周日的1:10分重启network服务

10  13  *  *  6,7  /user/bin/systemctl restart network

案例238. 每天18:00至23:00之间每隔30分钟重启network服务

*/30  18-23  *  *  *  /user/bin/systemctl restart network

案例239. 每隔两天的上午8点到11点的第3,15分钟执行一次network重启

3,15  8-11  */2  *  *  /user/bin/systemctl restart network

案例240. 每天凌晨整点重启nginx服务

0  0  *  *  *  /user/bin/systemctl restart nginx

案例241. 每周4凌晨2点15分执行命令

15  2  *  *  4  /user/bin/systemctl restart network

案例242. 工作日的9点到18点内的每小时整点执行脚本

0  9-18  *  *  1-5

案例243. 每1分钟向文件里写入一句话“云计算运维工程师”,且实时监控文件内容变化

*  *  *  *  *  /usr/bin/echo "云计算运维工程师" > /dev/null

案例244. 每天凌晨2点30分,执行ntpdate命令同步times.aliyun.com,并sys同步到硬件时钟,且不输出任何信息

30  2  *  *  *  /usr/sbin/ntpdate -u ntp1.aliyun.com &> /dev/null
5.4.6 定时任务权限(黑白名单)

禁止那些用户创建定时任务

/etc/cron.deny  # 黑名单,哪些用户不能使用定时任务
/etc/cron.allow  #白名单,哪些用户可以使用定时任务

[!CAUTION]

白名单的优先级高于黑名单

案例245. 将系统中的普通用户(UID>1000)的加入黑名单,如果想要那个用户使用crontab则加入白名单

[root@kylin-ren-class /]# awk -F: '$3>1000 {print $1}' /etc/passwd > /etc/cron.deny

[root@kylin-ren-class ~]# su - pengyu

[pengyu@kylin-ren-class ~]$ crontab -e
You (pengyu) are not allowed to use this program (crontab)
See crontab(1) for more information

案例246. 将pengyu这个普通用户加入白名单

[root@kylin-ren-class /]# echo pengyu > /etc/cron.allow

[pengyu@kylin-ren-class ~]$ crontab -e #可编辑
5.4.7 crontab相关的目录
  1. 定时任务默认存放路径

    /var/spool/cron/
    
  2. 定时任务服务端的运行日志

    /var/log/cron
    
  3. 定时任务crontab会在系统中生成大量的邮件日志,会占用大量的磁盘,关闭的步骤

    # 查询服务是否存在
    find / -type f -name 'post*.service'
    查询服务是否存在
    systemctl list-units | grep post
    # 停止服务
    systemctl stop postfix
    # 查看服务运行状态
    systemctl status postfix
    # 禁止开机自启
    systemctl disable postfix
    
posted @ 2025-03-02 17:34  小时候老白啦  阅读(225)  评论(0)    收藏  举报