例行性工作排程--crontab、anacrontab

本文深入解析Linux系统中的crontab任务调度机制,包括其语法、使用方法、安全性控制、日志查看及服务重启步骤,帮助用户高效管理定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、语法:
[root@www ~]# crontab [-u username] [-l|-e|-r]
选项与参数:
-u  :只有 root 才能进行这个任务,亦即帮其他使用者建立/移除 crontab 工作排程;
-e  :编辑 crontab 的工作内容
-l  :查阅 crontab 的工作内容
-r  :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。

代表意义 分钟 小时 日期 月份 周                                指令
数字范围 0-59 0-23 1-31 1-12 0-7(0 或 7 时,都代表‘星期天’)

2、数字中特殊符号含义:
*  任何时间
,  或的意思,举例来说,如果要下达的工作是 3:00 与 6:00 时,就会是: 0 3,6 * * * command
-  时间范围
/n ‘每隔 n 单位间隔’的意思

3、易混淆概念
执行文件是:/usr/bin/crontab,每分钟都会去扫描/etc/crontab 与 /var/spool/cron 里面的资料内容。

crontab -e  建立的是用户自己的例行工作,建立后会出现/var/spool/cron/ 里;
vi /etc/crontab  建立的是系统的例行工作,如执行目录下所有可执行脚本,如01  *  *  *  *   root      run-parts /etc/cron.hourly表示每小时执行一下cron.hourly目录下所有可执行的脚本。

4、安全性控制
/etc/cron.allow:
将可以使用 crontab 的帐号写入其中,若不在这个档案内的使用者则不可使用 crontab;

/etc/cron.deny:
将不可以使用 crontab 的帐号写入其中,若未记录到这个档案当中的使用者,就可以使用 crontab。

都是一行一个帐号,/etc/cron.allow 比 /etc/cron.deny 要优先,而判断上面,这两个档案只选择一个来限制而已,因此,建议你只要保留一个即可, 免得影响自己在设定上面的判断!一般来说,系统预设是保留 /etc/cron.deny , 你可以将不想让他执行 crontab 的那个使用者写入 /etc/cron.deny 当中。

当使用者使用 crontab 这个指令来建立工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的。不要使用 vi 直接编辑该档案, 因为可能由于输入语法错误,会导致无法执行 cron。

5、日志查看:/var/log/cron,里面有多个备份,一周一个,当前的就是cron

6、服务重启:/etc/crontab 之后,可能并不会马上执行, 这个时候请重新启动 crond 这个服务吧!‘/etc/init.d/crond restart’

7、注意事项:
周与日月不可同时并存,不可使用“几月几号且为星期几”的模式工作。

8、anacron--开机后立刻进行 anacron 的动作,他会去侦测停机期间应该进行但是并没有进行的 crontab 任务,并将该任务执行一遍后,anacron 就会自动停止了,这是由于 anacron 会以一天、七天、一个月为期去侦测系统未进行的 crontab 任务。一般默认设置就可以了。

配置文件:/etc/anacrontab,语法再参见别的手册。

要确定 anacron 是否开机时会主动的执行,你可以下达下列指令:[root@www ~]# chkconfig --list anacron

是的,cron-utils可以用来验证crontab表达式的有效。通过使用cron-utils,您可以解析验证一个crontab表达式的每个部分,包括分钟、小时、日期、月份星期几。如果表达式无效,cron-utils将返回一个错误消息,告诉您表达式的哪个部分是无效的。 下面是一个使用cron-utils验证crontab表达式有效的示例代码: ```java import com.cronutils.descriptor.CronDescriptor; import com.cronutils.model.Cron; import com.cronutils.model.definition.CronDefinitionBuilder; import com.cronutils.parser.CronParser; import com.cronutils.validator.CronValidator; public class CronUtilsExample { public static void main(String[] args) { String crontabExpression = "0 0 * * * ?"; // an example crontab expression CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ)); Cron cron = parser.parse(crontabExpression); CronValidator validator = CronValidator.instance(); validator.validate(cron); CronDescriptor descriptor = CronDescriptor.instance(); String description = descriptor.describe(cron); System.out.println(description); } } ``` 在上面的代码中,我们首先使用CronParser解析了一个crontab表达式,然后使用CronValidator验证了这个表达式的有效。最后,我们使用CronDescriptor生成了一个可读的描述,以便了解这个表达式的含义。如果表达式无效,CronValidator将会抛出异常,告诉您表达式的哪个部分是无效的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值