这是我参与更文挑战的第22天 ,活动详情查看更文挑战
at
指定在将来的某个时间点执行某些命令,通过atd守护进程来实现
systemctl status atd
at [选项] TIME
at -l / atq #列出所有的作业
at -d / atrm 任务号 #删除作业
at -q #指定队列来存储(默认为a队列),队列的编号为a-z A-Z,共52个,字母越大,优先级越低。
执行方式:
-
交互式 在shell提示符下输入“at 时间”,然后按回车键。这时在下一行shell会等待用户继续输入要执行的命令。每一行输入一个命令,所有命令都输入完毕后按Ctrl+d键结束。
-
指定文件 将各个命令写入shell脚本中,然后使用下面格式设置在指定时间执行shell脚本中的命令: at 时间 -f 脚本文件。
执行结果会发邮件通知 /var/spool/mail/xxx
时间格式
- 具体时间日期 hh:mm MM/DD/YY 23:59 03/15/2017
- 模糊词语格式 hh:mm midnight tomorrow am… 17:20 tomorrow
- 相对计时法 时间点 + 多少 + 时间单位 now + 2 minutes 5pm + 3 days
cron
at命令产生的进程调度不具有周期性,只能在时间条件满足时执行一次。但很多时候需要重复地周期性地执行某个程序。crontab用来让使用者在固定时间或固定时间间隔执行程序。
格式:
crontab [ -u user ] 文件
crontab [ -u user ] { -l | -r | -e }
只有root用户可以指定他人的时间表
主要参数
- e:执行文字编辑器来设定时程表,内定的文字编辑器是vi
- r:删除目前的时程表
- l:列出目前的时程表 和at命令相比,crontab命令适合完成固定周期的任务
原理
- cron命令在系统启动时由一个shell脚本自动启动,进入后台,crond守护进程。
- cron启动后搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这种文件将载入内存。
- 如果没有crontab文件,就转入“休眠”状态,释放系统资源。
- cron每分钟“醒”过来一次,查看当前是否有需要运行的命令。
- 如果发现某个用户设置了crontab文件,它将以该用户的身份去运行文件中指定的命令。命令执行结束后,任何输出都将作为邮件发送给crontab的所有者,或者/etc/crontab文件中MAILTO环境变量中指定的用户。
对用户来说,只需要关注自己的crontab文件的撰写,不需干涉crond进程的执行。因为一个用户只有一个crontab文件,crontab文件不能直接创建或者直接修改,必须通过crontab命令得到。crontab命令用于安装、删除或者列出用于驱动cron后台进程的crontab文件 。