首页 > 编程知识 正文

计划任务服务可以禁止吗,计划任务服务无法启动

时间:2023-05-05 11:37:05 阅读:211805 作者:313

计划任务分为一次性计划任务(at命令)与长期性计划任务(crontab命令):

一次性计划任务:任务执行一次后就不存在;长期性计划任务:每隔一定的周期需要执行的任务。

   

一次性计划任务 一次性计划任务只执行一次,一般用于满足临时的工作需求,可使用at命令实现该功能。 执行at命令时,必须要有atd(单一的例行性工作调度)服务的支持(d:deamon守护进程 < http://blog.csdn.net/woxiaohahaa/article/details/53487602> )。

当使用at命令来生成所要运行的一次性计划任务时,会将该工作以文本文件的方式写入/var/spool/at/目录内,等待atd服务的取用与执行。

由于安全问题,并非所有用户都可以进行at工作调度。系统会利用/etc/at.allow与/etc/at.deny这两个文件来进行at的使用限制:

使用at命令时会进入at shell的环境来让用户下达工作命令。因此最好使用绝对路径来执行相关命令(at在运行时,会切换到下达at指令的那个工作目录。如在/tmp中执行"at now",然后输入"mail root -s "test"<.bashrc",该bash.rc文件将会是/tmp/.bashrc)。 由于在at工作调度的使用上,系统会将该项at工作独立出用户的bash环境,直接交给系统的atd程序来接管,因此,当执行了at的工作之后就可以立刻脱机,余下的工作交由Linux管理即可(也就是使用at命令后(at工作后台执行),用户可脱机继续工作)。 at(executes command at a specified time):在指定的时间执行命令。格式:at [选项] [参数]。

选项

作用

-m

任务执行完成后,即使没有输出信息,仍以邮件email通知用户(若在at shell内的命令没有任何的信息输出,那么at默认不会发Email给执行者)

-l

列出当前系统上该用户的at调度任务列表(相当于atq命令)

-d

删除存在于at调度任务列表中的指定工作(相当于atrm命令)

-v

使用较明显的时间格式列出at调度中的任务列表

-c

列出指定工作的实际命令内容

at命令的执行与终端机环境无关。而所有的标准输出/错误输出都会传送到执行者的mailbox邮箱中,所以直接执行"echo Hello!"并不会显示在终端机上。

若需要将信息显示在终端机屏幕上,可通过who命令查看终端机的设备,再交由输出重定向处理。

at -l或atq查看该用户目前的at工作调度:

at -c 工作号码可显示该项at工作的详细信息(显示结果与cat /var/spool/at/目录内的工作文本文件相同):

at -d 工作号码或atrm 工作号码删除指定工作项:

batch(分批处理):在指定的时间,当系统不繁忙(CPU工作负载小于0.8(可以使用uptime命令查看系统的负载情况))时执行命令。用法与at类似。

   

长期性计划任务 循环执行的例行性工作由cron(crond)服务来控制(默认启动的),可使用crontab命令实现循环型工作调度。 为了安全性的问题,与at类似的,会进行用户使用限制:

当用户使用crontab命令来新建循环线工作调度之后,该项工作就会被记录到/ var/spool/cron/目录中,而且是以账号来作为判别的,但不要使用Vim直接编辑该文件,因为可能会由于输入语法的错误,导致无法执行cron:

另外,cron执行的每一项工作都会被记录到/var/log/cron这个日志文件中,可藉由检查此日志文件来检查是否有"非正常用户设定的cron被执行了",防止系统被植入木马:

crontab表达式的六个字段:

("周"的数字为0或7时,都代表"星期天"的意思)

注意事项:

为避免邮箱不断收到例行性任务的输出讯息(如DNS检测系统中,若DNS长层主机挂掉,那么会一直发送错误信息邮件),此时可利用数据流重定向把结果输出到/dev/null中(> /dev/null 2>&1);如果大量crontab周期任务都在同一时间执行,那么在某个时段,系统将相当繁忙,会造成“系统资源分配不均”的问题:

参考: <https://segmentfault.com/q/1010000010790162/a-1020000010790309> 

crontab(计划任务):提交和管理用户的周期性执行的任务。格式:crontab [选项] [参数]。

选项

作用

-u

(管理员身份)创建、编辑其他用户的周期性计划任务

-e

创建、编辑该用户的周期性计划任务

-l

查看该用户当前的周期性计划任务

-r

删除该用户当前所有的周期性计划任务(若仅要删除一项,可用-e去编辑)

   

crontab -e新建该用户的周期性计划任务:

注意事项:

如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条;因每个用户都只有一个位于/var/spool/cron/目录中的文件来记录crontab工作调度,所以命令一定要用绝对路径的方式来编写(可使用whereis命令查询路径)。

crontab -l查看周期性计划任务:

crontab -r删除周期性计划任务文件(全部的计划工作都会被删除,若仅想删除某一项工作,则需要使用crontab -e去编辑计划任务)

crontab -u 用户名 [-ler]管理员帮助其他用户查看、创建编辑或删除周期性计划任务:

系统的例行性任务配置文件:/etc/crontab。cron会每分钟去读取一次/etc/crontab与/var/spool/cron/中的数据内容。若要修改或增加系统的例行性命令,可以root身份直接编辑/etc/crontab文件并保存,cron的设定会自动执行(但会由于crontab是读到内存当中的,所以在修改完/etc/crontab之后,可能不会立刻执行,需重新启动cron服务"systemctl restart crond")。

注意事项:

为避免邮箱不断收到例行性任务的输出讯息(如DNS检测系统中,若DNS长层主机挂掉,那么会一直发送错误信息邮件),此时可利用数据流重定向把结果输出到/dev/null中(> /dev/null 2>&1); 如果大量crontab周期任务都在同一时间执行,那么在某个时段,系统将相当繁忙,会造成"系统资源分配不均"的问题:

一般来说,cron服务预设有三个地方会有执行脚本配置文件:/etc/crontab、/etc/cron.d/*、/var/spool/cron/*。其中跟系统的运行相关的配置文件是存放在 /etc/crontab文件内以及/etc/cron.d/目录内的文件;跟用户自设工作相关的配置文件则放在/var/spool/cron/中的文件群:

run-parts是一个shell script/脚本(可使用"which run-parts"查看路径),会将寻找其后接目录内的所有可执行文件,并在大约5分钟内执行指令任务(而不是分、时、日、月、周的设定值)

而/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/,分别代表每日、每周、每月各执行一次的意思,它们与anacron有关:

个人化的行为建议使用"crontab -e",根据个人需求来建立例行性计划任务(保存在/var/spool/cron /目录中),因为/etc/crontab文件是可以被所有用户读取的:

系统维护管理建议使用"vim /etc/crontab"来创建例行工作排程,直接写入/etc/crontab管理方便易追踪。自行开发的软件建议使用"vim /etc/cron.d/newfile"来创建全新的配置文件。固定每小时、每日、每周、每天执行的特别工作,也可以放置到/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/中。对于非24小时启动的LInux系统的crontab执行,以及因为某些原因导致的超过时间而没有被执行的排程工作,须依靠anacron命令的功能。anacron预设会以一天、七天、一个月为期去侦测系统未进行的crontab任务。anacron会通过读取时间记录文件(timestamps),来获知系统的关机时间,然后去分析当前时间与时间记录文件所记载的上次执行anacron的时间,两者比较后若发现有差异,则代表在某些时刻没有进行crontab,此时anacron就会开始执行未进行的crontab任务。 anacron是一支程序而并非一个服务,它在CentOS中已经属于crontab的调度,同时anacron会每个小时被主动执行一次,其配置文件为/etc/cron.hourly/0anacron(为了防止anacron误判时间参数,/etc/cron.hourly/中的anacron会在文件名前加"0"(0anacron),表示让anacron优先进行,更新时间戳)

anacron(anachronistically过时地)的语法:

anacron的配置文件:/etc/anacrontab

天数:anacron分析当下与时间戳(/var/spool/anacron/内的时间记录文件)相关的天数,若超过此天数,就准备开始执行指令,若没有超过此天数,则不予执行后续的指令;

延迟时间:如果已确定超过天数而导致要执行排程工作,那么将延迟多久后开始执行,因为若立即启动该项工作可能会产生资源冲突的问题;

工作名称定义:记录在/var/log/cron中该项任务的名称,通常与后续的目录资源名称相同即可;

指令串:通过run-parts来处理(与/etc/cron.d/0hourly类似)。

anacron的执行流程:

如此一来,放置在/etc/cron.daily/内的任务会在一天后被执行。由于anacron是每个小时被执行一次,因此,开机过后约1小时左右系统会有一小段忙碌的时间,硬盘使用率会比较高,anacron会执行过去/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/中的未进行的各项工作排程。

crond与anacron的关系: cron会主动去读取/etc/crontab、/var/spool/cron/*、/etc/cron.d/*等配置文件,并依据"分、时、日、月、周"的时间设定去各项工作排程;根据/etc/cron.d/0hourly的设定,会主动去/etc/cron.hourly/目录下,执行所有在该目录下的执行文件;因为/etc/cron.hourly/0anacron这个脚本文件的缘故,系统主动的每小时执行anacron,并呼叫/etc/anacrontab的配置文件;根据/etc/anacrontab的设定,依据每天、每周、每月去分析/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/内的执行文件,以进行固定周期需要执行的指令。

转载于:https://www.cnblogs.com/dayoyan/p/8653962.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。