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 协议》,转载必须注明作者和本文链接
你应该了解真相,真相会让你自由。
本帖由系统于 1年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 10

像生产队的母猪一样高产

1年前 评论

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

1年前 评论
快乐的皮拉夫 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
41
粉丝
121
喜欢
715
收藏
768
排名:249
访问:3.8 万
私信
所有博文
社区赞助商