【Linux计划任务】利用at和crontab给自己设置任务

(先上一堆废话)

十一国庆,我总算知道我高中为什么这么菜的原因了。即便我觉得现在的自己比高中的我强了好几个档次(上了985高校,一有空就往自习室跑,每一天的生活过得相当地充实),回到家依然是什么都做不了。看个小视频的功夫,一个下午就过去了。我非常心痛,毕竟我的同学们大都留在学校奋斗,只有我在家里颓废。所以我决定在接下来的日子里,比之前的9月份更加努力,这样一说,不妨定一个计划好了,如果Linux能帮我完成这个计划,那就更好了。

在现在的我看来,我要Linux帮我完成两个任务——一是我明天和同学有约,二是要帮我计划作息,不妨从每天定时关机做起。

 

·at

一. atd和at

Linux是怎么知道我们的计划任务的呢?事实上,他是通过每分钟扫描一次,来得知是否该执行计划任务(更精确一些,是整分钟的时候,这可能也是它的一个缺陷吧)。既然是一个长时间的进程,其背后必然有一个deamon在维护它,按照Linux的惯例,我下面要介绍的at对应的daemon是atd。

然而,在现在很多Linux的distribution中,这个atd并不是默认开启的,所以我们要将他手动开启:

systemctl restart atd    # 重启atd服务(这样就不用管之前有没有开启了)
systemctl enable atd     # 这个命令可以将atd设置为开机自启
systemctl status atd     # 查看atd服务的状态,开到enable/running的字眼就成功了

二. at的权限

Linux下at的权限设置得十分有创意,首先你要知道并不是所有人都能设置at任务,不然的话一些cracker就会乘虚而入。

关于这个at的权限文件一共有两个,分别是/etc/at.deny和/etc/at.allow,规则如下:

  1. 如果有at.allow,直接看用户在不在这个文件中就完事了。
  2. 如果没有at.allow,但是有at.deny;那只能看at.deny里有没有该用户了。
  3. 如果两个文件都没有,不好意思,只有root这个天神才能使用at命令.

三. at的详细使用

at的使用非常简单:

  1. 在shell中键入at+具体的时间。然后进入相应的at shell环境。
  2. 在at shell里键入你所需要的命令,注意该shell的初始目录在它父进程的当前目录中,以防万一,直接键入绝对路径
  3. 最后以EOF(UNIX中以Ctrl+D模拟)退出at shell。

四. 其他命令

  1. atq:非常实用的命令,我一般用完at,就用它来看看你设置过什么任务。
  2. atrm:同样非常实用的命令,利用这个可以删除制定的任务。
  3. batch:at的一个变种,用法同at。不同的是,当CPU的负载在0.8以上时,任务会被取消。

 

·crontab

一. crontab的相关文件

【Linux计划任务】利用at和crontab给自己设置任务_第1张图片

                                                   (LibreOffice真的是自由,真心比不上Microsoft office,微软大发好!)

二. crontab命令使用

  1. 如果是用户级,首先要看有木有权限(方法同at),没有的话只能通过root来设定crontab了。如果有权限,可以通过crontab -e来修改文件或者通过crontab -l来查看文件内容(相关文件见上图)
  2. 如果是系统级,就要通过vim /etc/crontab来进行任务的设定。
  3. 如果是自己开发的软件要设定计划任务,可以通过vim /etc/cron.d/newfile

(P.S. 其实cron.d里面的command都是在执行/etc/cron.hourly里面的或者其他类似脚本,因此你也可以把相关的文件写进cron.*目录中,达到类似的效果)

三. 修改crontab配置文件

之前有说过我们要通过vim来自己添加或者写配置文件。那么这个文件到底怎么写呢?命令到底怎么加呢?其实在相关文件的注释中都有提示,也很简单,百度一下马上有了的东西。我这里主要想介绍一下一些特殊符号的意义:

符号 意义
* 任意时刻
用来分割多个时刻
- 表示一段时间范围
/n 表示隔n个单位

 

·anacron

一. 什么是anacron?anacron与crontab的区别?

直接将crontab与anacron的差别好了,简而言之,crontab就是用来执行anacron因特殊原因(比如说关机)未能执行的任务。

当然这个说法欠妥,比如/etc/cron.daily下有个文件叫做0anacron(之所以会有一个0前缀,是因为系统想把它作为第一个脚本执行),也就是说,crontab每天都会执行0anacron脚本。然而,在我的系统(18.04.1-Ubuntu)中,其内容只有anacron -u(仅更新timestamps)

【Linux计划任务】利用at和crontab给自己设置任务_第2张图片

二. anacron相关文件

你要知道crontab看上去和anacron紧密相连,其实它有自己独特的一套规矩,与anacron相关的文件:

  1. /etc/cron.daily/0anacron: 每天被crontab执行的anacron脚本。这个文件说明了crontab和anacron之间的联系。
  2. /etc/anacrontab:这个可以被视为是独立于crontab的anacron,里面是anacron的配置文件。(具体内容详见《鸟哥的Linux私房菜》P513)
  3. /var/spool/anacron/*: 这里存放了各种anacrontab中提到文件的timestamps。

三. anacron原理

虽然笔者不打算分析anacrontab,但是还是想提一下anacron的原理。

  1. 讲anacron执行时间和/var/spool/anacron/*中相关文件的timestamps相减,看看是否超过自己设定的时间差。
  2. 如果超过了,按照/etc/anacrontab里面的设定,延迟一段时间。
  3. 最后执行command栏中的数据。

好像有点纸上谈兵的感觉,建议大家自己去看看相关文件的内容好了。

(PS:anacron和crontab并不冲突,放心设置好了)

 

你可能感兴趣的:(linux)