一、一次性计划任务 at
Syntax:
#at <time>
> command line
> Ctrl + D to finish
at 3:15
at now + 2 minutes
eg.
[root@localhost ~]# at 1:47
at> whoami
job 6 at Sun Feb 14 01:47:00 2021
[root@localhost ~]#
at -l 或atq
[root@localhost ~]# at -l
5 Mon Feb 15 00:57:00 2021 a root
6 Sun Feb 14 01:47:00 2021 a root
atrm jodid
eg.
#atrm 6 #删除job6
二、周期性计划任务 crontab
由crond提供服务
常用参数
crontab -e 创建、编辑计划任务
crontab -l 查看计划任务
crontab -r 删除某条计划任务
1)创建:crontab -e,进入编辑模式
注意: 所有命令需要用绝对路径执行,找不到可以用whereis, 例如 /usr/bin/tar -czvf backup.gz /home/wwwroot
crontat -e 进入编辑模式后注意事项:
如果要创建多条计划任务的语句,每行仅写一条
Syntax: 分 时 日 月 星期 命令
其中分、时必须设置,日与星期不能同时设置,可以用 * 代表一个参数占位, 可以用 - 作为时间范围连接符
eg. 每天凌晨2点清空/tmp 文件夹下所有内容
0 2 */1 * * /usr/bin/rm -rf /tmp/*
eg. 每周三到周五晚上2点重启一下服务器
0 2 * * 3-5 /usr/sbin/reboot
脚本无法执行问题
如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。
解决方法:
-
1、所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。
-
2、在 shell 脚本开头使用以下代码:
#!/bin/sh . /etc/profile . ~/.bash_profile
3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh