> Linux教程 > Linux学习 >

【Linux学习】任务计划

任务计划
使用cron实现任务计划
root用户可以修改/etc/crontab文件可以实现任务计划,而普通用户无法修改此文件。crond守护进程可以在无需人工干预的情况下,根据设置的时间和日期组合来调度执行重复任务。

systemctl start crond.service #启动crond服务
systemctl enable crond.service #设置开机自启动


/etc/crontab文件说明
/etc/crontab文件是cron的默认配置文件。

SHELL=/bin/bash #使用哪个shell来执行
PATH=/sbin:/bin:/usr/sbin:/usr/bin #定义用来执行命令的路径
MAILTO=root #输出被邮寄给该出定义的用户名
#文件中的每一行表示一项任务,格式如下:
minute(分钟)  hour(小时)  day(日期)  month(月份)  day of week(星期)  user-name(执行命令的用户)  command(执行的命令或shell脚本)

举例:
30 21 * * * root /root/backup.sh #在每天晚上的21:30执行/root/backup.sh文件


/etc/cron.d目录
除了通过修改/etc/crontab文件实现任务计划外,还可以在/etc/cron.d目录中创建文件来实现。
语法规则和/etc/crontab文件一样。

使用crontab命令实现任务计划
root用户以外的可以使用crontab命令配置cron任务,所有用户定义的crontab都被保存在/var/spool/cron目录中,并使用创建它们的用户身份来执行。

crontab [选项] [文件]
-u <用户名> 用户名,如果使用自己的用户名登录,则不需要使用该选项
-e 编辑用户的crontab
-l 列出用户的crontab中的内容
-r 删除用户的crontab
例:
#编辑前需要设置EDITOR环境变量告诉crontab使用哪个编辑器编辑crontab
#编辑用户主目录下的.bash_profile文件,加入export EDITOR=vi
crontab -e #使用编辑器编辑任务计划命令
crontab -l #列出自己的crontab


控制crontab
/etc/cron.allow和/etc/cron.deny文件用来限制用户对crontab的使用。这两个文件的格式都是每行一个用户。如果控制文件被修改了,crond守护进程不需要重启。如果/etc/cron.allow文件存在,那么其中列出的用户才可以使用crontab,并且/etc/cron.deny文件会被忽略。如果该文件不存在,则在/etc/cron.deny文件列出的用户都被禁止使用crontab。

默认只有/etc/cron.deny文件,需要自己手工创建/etc/cron.allow文件。

使用at实现任务计划
cron用来调度重复的任务,而at被用来在指定的时间内调度一次性的任务。

systemctl start atd #启动atd服务

at [选项] [时间参数]
-f <脚本文件>:要提交的脚本文件
-l:列出当前所有等待运行的作用。
-d:清除某个作业,需要提供相应的作业标示ID
-t <时间>:在指定时间提交作业

例:
at now -f /root/script
at -l #列出所有作业


使用anacron实现任务计划
anacron不是取代cron的,它的功能在于处理非24小时一直启动的Linux系统的cron的执行,以天、周、月为单位或是在开机后立刻运行anacron操作,他会去检查计算机停机期间应该运行但并没有运行的cron任务,并将该任务执行一遍后,anacron就自动停止了。

anacron通过分析现在的时间与时间记录文件所记载的上次执行时间,两者比较后如果发现差异,会代表在某些时候没有进行cron,此时就会检查。

(责任编辑:IT)