cron - 生产就绪的替代方案

cron - 生产就绪的替代方案

我正在测试 Raspberry Pi,目的是在生产系统中使用它来记录制造数据。一切运行良好,我在上个月一直在记录测试数据。

为了冗余和风险管理,我有一堆需要安排的 Python 脚本。

过去,我一直在 Windows Server 环境中工作,任务计划程序完成了我需要的一切。记录问题、失败时重试任务、通知等等。

过去几周我一直在玩 cron,浪费了太多时间。日志文件没有帮助,而且由于我没有安装 MTA,所以真正的错误会丢失。

有什么替代方案可以使日程安排变得更容易而不是更困难吗?

添加了有关该问题的详细信息:

  • 我过去曾尝试过“>>”,但运气不佳。如果这是正常的做法,我会再试一次。
  • 如果我手动运行,Python 脚本运行良好。但是,一旦我将它放入 crontab 中,它就会停止工作,并且没有日志,我无法解决它或至少无法理解问题。
  • 看来是写文件的问题。正在运行的 cron 作业是连接到蓝牙设备的 python 脚本,然后将数据记录在 MySQL 数据库中。
  • Cron 日志试图报告作业的输出,但由于 MTA 未设置,它仅报告 MTA 问题,并在实际问题中为我提供零额外信息。 (/var/log/cron.log 这是主日志,对吧?)
  • 我会调查 MTA,互联网连接是一个问题,并且可能无法始终可用。
  • 我的数据记录作业位于“crontab -e”中,我有一项作业正在创建位于“sudo crontab -e”中的图像文件。 (我拿了两个不同的crontab文件)
  • 我所有的 cron 作业都类似于:00 6 * * * python /app/test.py

答案1

事实上,克朗生产就绪。它经过了如此多次的战斗考验,很难指责它出现故障。您可能遇到的问题是由简单错误引起的。如果您准确地指出 cron 的问题是什么,将会有很大帮助。

正如 gaueth 已经指出的,您可以>> /tmp/somefile 2>&1在 crontab 中附加到您的命令。其作用是:

  • >> /tmp/somefile表示“将命令的标准输出流附加到/tmp/somefile”。这只是将原本在终端上打印的所有内容写入指定的文件中。请注意使用>>(追加)而不是>(覆盖)。
  • 2>&1意思是“将 stderr 发送到 stdout”。用人类的话来说:将任何错误的输出写在编写标准输出的同一位置(如上所述)

使用它,您将获得 cron 执行脚本后发生的情况的完整日志。请注意,让脚本打印出当前日期(也许还有其他一些内容)可能是一个好主意,以便您在日志文件中拥有这些数据。

另一件要记住的事情是PATH变量。 Cron 的运行环境与交互式终端会话略有不同,因此最好将 的输出包含echo $PATH在脚本本身或 crontab 行中,如下所示:*/20 * * * * export PATH=<paste output of echo $PATH here>; <command>

答案2

您可以> /tmp/logfile 2>&1在 crontab 计划命令之后使用将命令的输出重定向到日志文件。还请查看gnome 时间表用于使用crontab和 的图形用户界面at

答案3

Unix 系统上的生产就绪调度工具是 cron。

日志记录问题

Cron 记录什么对系统日志执行的操作。它通过电子邮件发送作业的输出(如果有)。

失败时重试任务

Cron 不会这样做,这是有充分理由的。失败时重试任务是业务逻辑。系统如何知道哪些故障应该导致重试以及何时重试,哪些是致命错误?如果您需要重试,请根据需要重试您的任务,或者在不同时间安排多个作业。

通知

请参阅上面的日志记录。通常成功的作业不会导致通知,只会导致日志条目。如果您想要作业完成时的通知,请使用您首选的通知机制将其添加到任务脚本中。 (与具有准强制 GUI 的 Windows 不同,Unix 不在 GUI 环境中运行批处理作业,因此没有内置的基于 GUI 的通知工具。)

多得多。

什么?

因为我没有安装 MTA,所以真正的错误会丢失。

“医生,我这样做的时候会很痛。”

安装 MTA。尽管某些发行版在基本安装中省略了它,但能够发送电子邮件的 MTA 是任何 Unix 安装的预期组件。

答案4

我已经非常喜欢詹金斯 CI用于各种“类固醇克罗恩”任务。我用它来制作和恢复备份,清理陈旧的文件/目录,涉及多个步骤的自定义例程等......基本上任何可以自动化的东西。日志记录很棒,您似乎需要的功能要么默认存在,要么使用众多可用插件之一轻松添加。

尝试一下,在了解了 CI 管家之后,您会想知道自己是如何度过的。

相关内容