使用at、crontab命令可以让命令在未来的某个时间自动执行
1 at命令
首先要想启用at服务,需要启用atd.service
systemctl start atd.service
at命令
作用:使命令在未来指定的某个时间运行,是一个一次性命令,默认从标准输入读入将来要执行的命令
格式: at [options] TIME
options:
-l 列出队列中等待运行的作业,相当于atq
-t time 让任务在指定的时间运行,时间格式为[[CC]YY]MMDDhhmm[.ss]
-d 作业编号 删除指定的作业,相当于atrm
-c 作业编号 查看指定的作业任务
-f /path/file 从文件中读取任务
其中若不加-t指定时间,可以用以下时间格式
HH:MM[YYYY-mm-dd]
now +count {minutes,hours,days,weeks}
例如
at now + 12 minutes //意为从现在起再过12分钟执行此任务
at 8:00 //意为在8:00执行此任务
还有其它的时间格式
另外,at命令的队列存储在/var/spool/atd中
还可以对用户设置执行at命令的黑白名单:
2 crontab命令
crontab可以用来设置周期执行的计划任务
主要选项如下:
- u user 指定用户user的计划任务,只有root可用
- e 编辑任务
- l 列出所有计划任务
- r 移除所有计划任务
- i 和r选项一起使用,交互式的删除计划任务
当用-e选项设置计划任务时,会进入编辑界面:
@reboot DiskCheck.sh >> /home/v/diskcheck.log //这是一个已经编辑好的计划任务
~
~
~
~
~
~
"/tmp/crontab.iopTzE" 1 line, 46 characters
计划任务的时间编辑有一定的格式,用来指定周期性执行的时间,具体格式如下:
分别可指定分钟、小时、月份、天数、星期、计划任务所有者(若不写默认是当前用户)和要执行的命令或脚本
如
30 12 * * * command //在每天的12:30执行command命令
~ //*表示是默认值,如若天数项为*则表示每一天,以此类推
~
~
~
"/tmp/crontab.iopTzE" 1 line, 46 characters
上面的编辑界面其实默认是用vim打开的,用:wq即可退出编辑,编辑完成后计划任务便会按时执行。
此外还有一些关键字可以用来设定时间
例如要每次开机时执行命令只需
@reboot command
另外切记在编辑界面中不能用 %
注:crontab也有allow和deny文件分别在
/etc/cron.allow
/etc/cron.deny