1.at,定时任务:
at规定任务在某个时间点执行一次。
#设置计划任务
$at [-f filename] time
#查看计划任务
$atq
#删除计划任务,no在atq中查看
$atrm no
#指定下一个时段执行:
$at -f cmd.sh +1min #下一分
$at -f cmd.sh +1hour #下一小时
$at -f cmd.sh +1day #下一天
$at -f cmd.sh +1mon #下一月
$at -f cmd.sh +1hour #下一小时
#指定固定时间执行:
$at -f cmd.sh 19:00 #今天19:00,如果时间已过,顺延到明天
$at -f cmd.sh 12312018 #2018年12月31号的当前时刻
2.cron,定期任务:
cron规定任务在某个时间点重复执行,依赖crond守护进程。
定期任务在/var/spool/cron下,以用户名为单位存储。
定期任务在/var/log下,生成名为cron的log。
定期任务会给当前用户发送邮件,mail命令可以查看,或者/var/spool/postfix/maildrop下查看。
command后追加 >/dev/null 2>&1,则代表不输出邮件和日志。
2.1.修改整机配置文件实现(对所有用户/指定用户生效):
$ 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用户,可以修改此文件):
$ echo "* * * * * user command" >> /etc/crontab
#重启服务,使此修改生效(crontab -l无法查看此类任务):
$service crond restart
2.2.命令行实现(对当前用户生效):
$ crontab -e
#格式,通配符*代表所有值。
min hour dayofmonth month dayofweek command
#输入下面文字,在每天10:30运行mkdir命令(此处可以替换成自己的脚本名)
30 10 * * * mkdir -p /home/test/cron
#保存退出,控制台输出下面的提示,代表创建成功。
crontab: installing new crontab
#每月最后一天执行:
0 0 * * * if[ `date +%d -d tomorrow` = 01 ] : then : command
#时点用,表示
#范围用-表示
#间隔用/表示
*/30 0,12 * * 1-5 command
#查看当前用户时间表:
$ crontab -l
3.3使用预设的cron脚本目录
$ ls /etc/cron.*ly
#文件夹下脚本,每天执行一次
/etc/cron.daily:
logrotate man-db.cron
#文件夹下脚本,每时执行一次
/etc/cron.hourly:
0anacron
#文件夹下脚本,每月执行一次
/etc/cron.monthly:
#文件夹下脚本,每周执行一次
/etc/cron.weekly: