2023-06-12    2024-01-10    761 字  2 分钟

crond计划任务

Crontab配置文件记录了时间周期的含义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@localhost ~]# cat /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)      # 周
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

crontab常用参数及选项。

参数 解释
-e 编辑定时任务
-l 查看定时任务
-r 删除定时任务
-u 指定其他用户

使用-r会删除目前所有的定时任务,慎用。

计划任务编写与实践

5分钟执行一次时间同步。

1
2
3
4
5
6
7
8
9
# 测试命令
[root@localhost ~]# ntpdate ntp1.aliyun.com
26 Aug 14:57:48 ntpdate[8147]: step time server 120.25.115.20 offset -2.430188 sec
编写定时任务
[root@localhost ~]# crontab -e
# 查看定时任务
[root@localhost ~]# crontab -l
# 每5分钟执行一次时间同步
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null

每天的下午3,5点,每隔半小时执行一次sync命令。

1
2
3
[root@localhost ~]# crontab -l
# 每天的下午3,5点,每隔半小时执行一次sync命令
*/30 15,17 * * * sync &> /dev/null

每天凌晨3点做一次备份?备份/etc/目录到/backup下面 (1) 将备份命令写入一个脚本中 (2) 每天备份文件名要求格式: 2019-05-01_hostname_etc.tar.gz (3) 在执行计划任务时,不要输出任务信息 (4) 存放备份内容的目录要求只保留三天的数据

1
2
3
4
5
6
7
8
9
# 根据要求编写脚本
[root@localhost ~]# cat back.sh 
mkdir -p /backup
tar czf /backup/$(date +%F)_$(hostname)_etc.tar.gz /etc/
find /backup/ -name "etc.tar.gz" -mtime +3 | xargs rm -f
# 编写定时任务
[root@localhost ~]# crontab -l
# 每天三点备份/etc目录
00 03 * * * bash /root/back.sh &> /dev/null

定时任务编写规范

  1. 给定时任务注释。
  2. 将需要定期执行的任务写入Shell脚本中,避免直接使用命令无法执行的情况tar date
  3. 定时任务的结尾一定要有&>/dev/null或者将结果追加重定向>>/tmp/date.log文件。
  4. 注意有些命令是无法成功执行的echo "123" >>/tmp/test.log &>/dev/null
  5. 如果一定要是用命令,命令必须使用绝对路径。

定时任务备份

定时的备份/var/spool/cron/{usernmae}


image-20231028232834657