在linux中有的程序是例行性的,如,只执行一次的任务和循环工作的任务。在正常的项目中,只执行一次的任务可能用的比较少,循环执行的任务可能比较常见,比如在项目中我们工作的进程可能会因为某种原因会导致进程挂掉,不可能手工干预去重启进程,所以这就需要定时任务去查询进程的状态,一旦一次就重启,保证功能的稳定性。
在linux的工作排除中,有且只有两种:at和crontab
一、仅执行一次的工作排程:at
首先linux系统上要有负责这个排程的服务atd,这样才能设置at服务,但是并不是所有的linux版本都会开启该服务,所以我们首先要启动这个服务:
systemctl restart atd ------重新启动atd服务
systemctl enable atd ------设置开机启动该服务
systemctl status atd ------查看atd服务状态
1、at的运作方式
在了解at的运行方式前,先了解下atd对用户的管理,并不是所有用户都可以设置at任务的,那它又是怎么管理的呢?是通过/etc/at.allow和/etc/at.deny这两个文件进行管理的:如果at.allow文件中有则可以,没有则不行,如果没有at.allow文件,则at.deny文件中有则不行,没有则可以,如果at.deny文件也没有,那只有root权限可以。
一共有两种,一种是以文件的形式放到/var/spool/at这个目录下,atd服务会自动加载并按照文件执行
第二种是以命令的形似加入:at [-mldv] TIME
-m :相当于atrm 删除排程中的工作
-c :列出指定排除工作的实际指令
而增加排程工作,实现如下:
下面了解下常用的at命令:
atq:查询at的排程工作
atrm jobnumber:删除指定编号的排程工作
batch:是在系统空闲的时候执行排程工作,一般是在负载小于0.8
一、循环执行的工作排程:crontab
循环执行的工作排程是由cron这个系统服务来控制的,而cron这个服务对用户的管理其实和at一样,是通过/etc/cron.allow和/etc/cron.deny这两个文件进行管理的,而用crontab命令生成的任务是放在/var/spool/cron的目录中的。
crontab的日志在/var/log/cron下,shell脚本的打印也在该日志中
crontab的语法:crontab [-u username] [-ler]
-l:显示所有工作排程
-e:编辑工作排程
-r:删除工作排程
下面的例子是每天12点发邮件:
下面是关于定时器中特殊符号的意义:
当我设置完定时器后,系统是怎么识别我们设置的任务的呢?系统是通过cron这个服务进行检测的,cron会每一分钟读取一次/etc/crontab(系统性的例行性任务)和/var/spool/cron里的内容。
下面了解下anacron:这个是一个什么样的存在,比如,之前设定的定时任务由于断电导致如期未执行,那么anacron就起作用了,它会一个小时执行一次,去检查那些由于超时未执行的任务,从而执行该任务。
来源:CSDN
作者:PYTHON探路者
链接:https://blog.csdn.net/zphdgqs/article/details/90112287