Linux计划任务分为一次性的和周期性的两类。
执行一次性的计划任务使用at命令。每次执行at命令需要给它传递一个时间参数,来指明计划任务执行的时间。比如:
$ at 10:00 tomorrow
在执行at命令之后,命令就会变成这样:
at>
此时,只要直接输入想要执行的命令即可,比如echo "hello world"。输入完命令之后,按组合键 Ctrl D来保存。然后机会立即显示类似这样的内容:
job 1 at 2017-12-30 10:00
这说明“job 1”将在2017年12月30日10:00整执行。这样就成功地创建了一个一次性任务。而且,每个计划任务也不是只能执行一个程序,也可以是一个按行划分的程序列表,待执行任务时,按程序出现的次序依次执行。
在Linux中Ctrl D代表EOF,说明已经输入完毕。但是这种EOF仅对直接从键盘中获得输入的情况有效,即输入Ctrl D之后,代表从键盘中获得的输入完毕了。所有的这种从标准输入获取输入数据的程序都可以使用类似方法输入数据。但是这种录入数据的方法有一个缺点,就是一旦中间有错误,就只能全部从来。为了弥补这个缺点,可以使用I/O重定向将一个文件中的内容输入给它。
周期性任务cron都是通过crontab命令来完成的。“crontab -e”用来编辑当前用户的cron表;“crontab -l”查看当前用户的cron表;“crontab -r”删除当前用户的cron进程;“crontab -u 用户名”以某用户的身份来控制cron表。
一个cron任务在cron表用一行来表示。每一行被分为两列,左边是时间,右边是具体运行的命令,时间是由5个部分组成,每部分用空格隔开,分别代表:
-
每小时的第几分钟:0~59;
-
每天的第几小时:0~23;
-
每月的第几天:0~31;
-
每年的第几个月:1~12;
-
每周的星期几:0~6,0表示星期日;
此外,在时间和命令之间,还有一个可选的用户名,用来说明cron以何种用户身份来执行命令。因此,一个cron任务的完整定义应该是:
分钟 小时 日 月 周 [用户名] 命令
比如要设定我女朋友生日那天,没到整点就提醒我买礼物,那么可以在cron表中添加如下一条:
0 * 1 8 * echo "女朋友生日,要买礼物。"
然后按“ESC”键退出到命令模式,输入“:wq”,退出并保存。这样,每到8月1日,整点就会提醒我。但是,突然发现整点有点太宽泛,甚至0点就开始提醒我,有些不妥,做了如下修改:
0,15,30,45 12 1 8 * echo "女朋友生日,要买礼物。"
这样,只有8月1日的中午12点,每隔15分钟,会提醒我一次。这样显然不错,还可以更简洁些,改进为:
*/15 12 1 8 * echo "女朋友生日,要买礼物。"
通过上面的这些内容,可以比较直观的看出,cron表中的时间设定拥有极高的灵活性,使得设定周期任务非常方便。每一个时间参数可以有几种符号表示,如表2-1所示:
2-1
虽然计划任务有时非常有用,但是也不是所有用户都能添加的,具体谁能添加计划任务,主要由系统中这四个文件来决定:at.allow、at.deny、cron.allow和cron.deny。顾名思义,以at开头的管理at,以cron开头的管理cron。而且这些问价是有互斥性的,即allow和deny不会同时存在。allow也叫白名单,deny也叫黑名单,所以在allow中的用户就允许指定计划任务,而在deny中的用户就不能指定计划任务。
绝对干货!!!持续更新!!!
如果您喜欢请加关注!!!
,