Linux 实用小技巧 —— 如何判断 Crontab 是否正常执行

简介

在我们开发的过程中,经常会遇到定时任务没有按照预期执行的情况。在 Linux 系统中,定时任务一般都是靠系统 Crontab 来实现的,本篇文章就来探讨一下如何判断 Crontab 是否正常执行的问题。

正文

我们都知道,查看用户配置了哪些 Crontab 一般使用以下命令:

crontab -l

实际上,上述命令查看的是当前登陆用户配置的 Crontab ,如果需要查看指定用户的 Crontab 呢?这时候我们需要在 crontab 命令上通过 -u 指定用户参数,如下:

crontab -u username -l

执行这个命令的前提是当前用户具有查看指定用户 Crontab 的权限。一般情况下,只有 root 可以查看所有用户的 Crontab 。

有些情况下,我们可能是刚刚接手项目,并不清楚 Crontab 是配置在哪个用户下的,这种情况应该怎么办呢?

如果你当前登陆的不用户不是 root 用户或者不具备 sudo 权限的话,你需要先赋予账号 sudo 的权限,因为查看所有用户的 Crontab 需要 root 特殊权限。

有了 root 权限的话,我们就可以在 /var/spool/cron/ 目录看到当前所有用户设置的 Crontab 了:

ll /var/spool/cron/
-rw------- 1 root root 1405 May 29 11:40 root
-rw------- 1 root root  420 May 29 11:40 www

这里我们可以看到以用户名命名的 Crontab 文件,打开文件就可以查看所有用户设置的 Crontab 详情了。

通过这种方式我们看到的是 Crontab 当前的配置内容。如果我们想查看 Crontab 历史的执行情况的话,可以通过查看 Crontab 的执行日志进行跟踪:

ll -h /var/log/cron*
-rw------- 1 root root 806K May 29 20:12 /var/log/cron
-rw------- 1 root root 3.3M May  7 03:17 /var/log/cron-20230507
-rw------- 1 root root 3.3M May 14 03:25 /var/log/cron-20230514
-rw------- 1 root root 3.3M May 21 03:08 /var/log/cron-20230521
-rw------- 1 root root 3.3M May 28 03:20 /var/log/cron-20230528

默认情况下,Crontab 的日志记录在 /var/log/cron 文件中,且会以星期为分界点进行分割。

这里我们根据我们需要定位的时间范围找到对应的日志文件,然后根据关键字进行匹配搜索即可:

cat /var/log/cron | grep '关键字'

从日志中,我们可以看到任务是否被调用,以及调用的用户,调用的时间以及调用的命令详情等信息。有了这些信息,我们就可以知道在过去的时间里,定时任务有没有被执行了。

以上介绍的是如何定位 Crontab 有没有正确执行的方法。那么现在问题来了,一般哪些操作可能会导致 Crontab 无法正常执行呢?

遇到这种问题我们一般从以下几个方面进行排查:

  • 时间调度配置的是否正确(可以通过 crontab.guru/ 这个网址进行自检)
  • 命令是否可以被正常调用(一般我们选择使用命令的绝对路径,也是为了避免环境变量中无法解析命令的问题)
  • 文件权限的问题(命令操作的文件或者重定向输出的文件是否具有权限)
  • 磁盘空间是否不足

我们可以把命令从 Crontab 中拿出来,在对应的用户环境下执行看能否正常执行。同样,当 Crontab 执行失败时,在日志中也可以看到对应的错误信息,通过这些错误信息我们也可以定位到问题所在。

好了,这就是我们在定位 Crontab 是否正常执行时常用的一些小技巧,你学会了吗?

本作品采用《CC 协议》,转载必须注明作者和本文链接
你应该了解真相,真相会让你自由。
本帖由系统于 8个月前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 10

像生产队的母猪一样高产

10个月前 评论

crontab 最常碰到的基础问题是 权限不足(执行者不对),work directory 不对(文件或配置找不到)。

10个月前 评论
快乐的皮拉夫 (楼主) 10个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!