预计阅读时间:15分钟
可能在凌晨的某个时刻,可能是在某个非高峰时间点,需要任务在规定的时间点自动运行起来,有些任务应该以固定的间隔时间进行,有些只需要执行以一次。
本文会首先介绍一下不同场景下的自动执行任务的命令以及区别,此外会针对命令详细讲解使用方法和注意事项。
01
—
定时执行任务的命令
crontab命令和at命令都是可以执行定时任务的命令,下面对两者区别进行列举:
(1)特点
- crontab:用于调度重复性任务
- at:用于调度只执行一次的任务
(2)文件位置
- crontab:/var/spool/cron/crontabs
- at:/var/spool/cron/atjobs
(3)控制访问的文件
- crontab:/etc/cron.d/cron.allow 和 /etc/cron.d/cron.deny
- at:/etc/cron.d/at.deny
定时任务的命令是如何执行的?
答:cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/目录,同样也会检查 /var/spool/cron/ 目录。
02
—
crontab 命令
(1)简介:crontab 是用来安装、卸载或者列出定时任务列表的命令。
(2)建立定时任务的两种方式
- 用户级:crontab -e
- 系统级:vi /etc/ crontab
(3)系统级任务调度&用户级任务调度
- 系统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务;
- 可以将用户级任务调度放到系统级任务调度来完成(不建议这么做),但是反过来却不行;
- 如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效
(4)crontab 语法
* * * * * 要执行的命令----------------| | | | || | | | ---- 周当中的某天 (0 - 7) (周日为 0 或 7)| | | ------ 月份 (1 - 12)| | -------- 一月当中的某天 (1 - 31)| ---------- 小时 (0 - 23)------------ 分钟 (0 - 59)
例如:
### 每隔 5 分钟运行一次 test 脚本 ##*/5 * * * * /root/test.sh
(5)常用方法
- 列出crontab文件:crontab -l
- 编辑crontab文件:crontab -e
- 删除crontab文件:crontab -r
- 删除某用户名下的定时任务,此命令需以 root 用户身份执行:crontab -r -u username
03
—
创建用户级定时任务示例
(1)任意位置输入crontab -e
(2)进入crontab的任务部署文档
(3)vim命令之后,shift+g跳转到最后一行,添加定时任务命令
例如:*/5 * * * * /root/test.sh
*/5 * * * * cd /root/test; ./test.sh >> test.log 2>&1
注:首先进入test所在路径,然后执行该路径下的test.sh脚本,最后通过> test.log输出日志。
(4)vim命令wq退出任务部署文档
(5)test.sh文件中,设置自己要执行的命令
(6)后台验证是否运行预设脚本
注:安装glances,命令行输入glances即可查看自己想要执行的命令行是否会运行
04
—
注意事项
4.1 创建了一个crontab,但是任务却无法自动执行,而手动执行没有问题原因:一般是由于crontab文件中没有配置环境变量引起的。
4.2 如何禁用邮件输出
(1)如果有内容输出的话,会默认发送到本地邮箱账户中,若想停止接收crontab发送的邮件,需要添加>/dev/null 2>&1这段内容到执行的命令的后面。
*/5 * * * * /root/test.sh >/dev/null 2>&1
(2)如果需要将输出内容发送到指定的邮件帐户,需要定一个变量:
MAILTO="vivek@nixcraft.in"*/5 * * * * /root/test.sh >/dev/null 2>&1