定时任务的软件的种类:
- 1、Linux操作系统自带的软件:crontab
- 2、第三方的定时任务软件:atd、anacron
- 3、WEB定时软件:PPGo_Job
- 4、基于etcd的定时任务系统
下面了解 Linux操作系统自带的软件:crontab。
cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/目录。它同样也会检查 /var/spool/cron/ 目录。
一、crontab命令
crontab命令来自英文词组“cron table”的缩写,其功能是管理定时计划任务。
用户只要能够按照正确的格式(分、时、日、月、星期、命令)写入到配置文件中,那么就会按照预定的周期时间自动地执行下去。
1、定时目录
cron默认配置了调度任务,分别为:hourly、daily、weekly、mouthly,目录分别为:
/etc/cron.d/ 将所有的脚本文件放在此处,并从 /etc/crontab 文件中调用它们。
/etc/cron.daily/ 运行需要 每天 运行一次的脚本
/etc/cron.hourly/ 运行需要 每小时 运行一次的脚本
/etc/cron.monthly/ 运行需要 每月 运行一次的脚本
/etc/cron.weekly/ 运行需要 每周 运行一次的脚本
2、Crontab日志路径
/var/log/cron目录中只会记录是否执行了某些计划的脚本,但是具体执行是否正确以及脚本执行过程中的一些信息则 Linux会每次都发邮件到该用户下。
[root@centos7 local]# ll /var/log/cron*
-rw------- 1 root root 10876 Oct 9 16:04 /var/log/cron
-rw------- 1 root root 50521 Sep 17 03:01 /var/log/cron-20230917
-rw------- 1 root root 50964 Sep 24 03:01 /var/log/cron-20230924
-rw------- 1 root root 50524 Oct 1 03:01 /var/log/cron-20231001
-rw------- 1 root root 50563 Oct 8 03:01 /var/log/cron-20231008
3、定时任务配置文件
/etc/crontab文件
Crontab命令在线验证工具:https://tool.lu/crontab
[root@centos7 local]# 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) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed[root@centos7 local]#
4、crontab命令
基本语法格式:crontab [参数] [对象]
常用参数:
- -e:编辑定时任务(默认是当前用户)。
- -l:查看定时任务任务列表(默认是查看当前用户的定时任务)。
- -r:删除定时任务(默认是当前用户)。
- -i:删除前询问用户是否确认。
- -u:设置用户名,指定用户名查看。
示例如下:
[root@centos7 local]# crontab -l
46 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
注意:crontab -l显示 no crontab for root,解决办法:
在 root 用户下输入 crontab -e,按ESC,然后:wq回车。再次输入crontab命令就行了。
主要原因是由于Liunx服务器 第一次使用 crontab ,还没有生成对应的文件导致的,执行了 编辑(crontab -e)后 就生成了这个文件,即初始化一下就行。
二、示例
使用 crontab定时任务实现备份功能并保留最近10天的备份副本,备份文件夹采用日期格式。
[root@centos7 local]# tree ./temp1
./temp1
├── files
│ ├── demo.log
│ └── xxx_dir
└── test1.log2 directories, 2 files
1、编写shell脚本
创建备份文件夹(文件夹日期格式),然后复制相关文件到备份文件夹中,最后删除10天之前的备份文件夹。
[root@centos7 temp2]# cat ./xxx_backup1.sh
#!/bin/bash
#
# This script is executed at the end of each multiuser runlevel. Make
# sure that the script will "exit 0" on success or any other value on
# error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.DATE=`date +%Y-%m-%d`# create backup dir
mkdir /usr/local/temp2/xxx_backup/${DATE}# backup file
cp -rf /usr/local/temp1/files/ /usr/local/temp2/xxx_backup/${DATE}/
cp -f /usr/local/temp1/test1.log /usr/local/temp2/xxx_backup/${DATE}/# find and delete file(time lt now-10)
find /usr/local/temp2/xxx_backup/ -maxdepth 1 -mtime +10 -type d -exec rm -rf {} \;exit 0
[root@centos7 temp2]#
# 分配权限
[root@centos7 temp2]# chmod 777 xxx_backup1.sh
可以手动执行脚本测试。
[root@centos7 temp2]# tree
.
├── xxx_backup
└── xxx_backup1.sh1 directory, 1 file
# 手动执行脚本
[root@centos7 temp2]# ./xxx_backup1.sh
[root@centos7 temp2]# tree
.
├── xxx_backup
│ └── 2023-10-10
│ ├── files
│ │ ├── demo.log
│ │ └── xxx_dir
│ └── test1.log
└── xxx_backup1.sh4 directories, 3 files
2、添加定时任务
使用 crontab -e命令添加定时任务。
每天夜里12点05分执行一次我们的脚本,添加下面内容保存即可:
[root@centos7 temp2]# crontab -e
crontab: installing new crontab
[root@centos7 temp2]# crontab -l
05 0 * * * root /usr/local/temp2/xxx_backup1.sh
– 求知若饥,虚心若愚。