如何通过Cron表达式来获取最近运行时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过Cron表达式来获取最近运行时间相关的知识,希望对你有一定的参考价值。

去码工具网上找,有解析crontab表达式的工具,看最近的运行时间 参考技术A 这个按照quartz的官方说明自己反向写也可以,或者更直接点,下载quartz的源代码,找到那一部分的逻辑

如何创建一个 cron 作业来运行 ruby​​ 脚本?

【中文标题】如何创建一个 cron 作业来运行 ruby​​ 脚本?【英文标题】:how to create a cron job to run a ruby script? 【发布时间】:2012-08-17 11:38:22 【问题描述】:

我想创建一个 cron 作业来运行 ruby​​ 脚本。这是我放在 crontab 中的内容。

2 * * * * ruby /home/mark/project/script.rb >> /home/mark/cronOutput.txt

但它没有运行。我认为当 cron 以 root 身份运行时,环境加载存在一些问题。

请帮忙。

【问题讨论】:

你愿意在rails中执行代码然后写一个rake task并在cron中执行。 骗局中的任何东西都需要完整的地址which rubywhich script 和哪里的信息。 使用主动臂sidekiq 【参考方案1】:

检查任何时候(https://github.com/javan/whenever) gem 在 Rails 中使用 cron 作业

【讨论】:

我用这个。但这最终在 crontab 中写了一份工作。我在从 cron 选项卡运行脚本时遇到问题。 您能解释一下您在从 crontab 运行任务时遇到的问题吗?您可以检查 /var/log/syslog 以查看 crontab 中的方法是否实际运行。 我想做的就是每 5 分钟左右运行一次 ruby​​ 脚本。我做不到。是的,我检查了 syslog 我的 cron 作业以运行 ruby​​ 脚本正在执行【参考方案2】:

如果您的 ruby​​ 位于非标准路径中,那么我个人喜欢将我的 ruby​​ 调用包装在 shell 脚本中,从而确保正确设置我的 ruby​​ 程序所需的所有路径等,并在 crontab 中安排脚本。做类似的事情

2 * * * * /home/mark/project/ruby_wrapper_sh >> /home/mark/cronOutput.txt 2>&1

你的 /home/mark/project/ruby_wrapper_sh 应该是这样的

#!/bin/bash

. ~mark/.bash_profile 
`ruby /home/mark/project/script.rb`

【讨论】:

不工作.. 我试图在终端上运行 shell 脚本,它说 Can't open /home/mark/.bash_profile 我刚刚给您举了一个例子,您的用户帐户可能仅使用 .profile 或 /etc/profile 文件设置。在运行脚本之前,您需要根据您的环境更改此行。只要您能够从命令行修复和执行此脚本,通过 cron 运行它应该没有问题 我尝试通过终端以 root 身份运行脚本。我用su切换到root。出现许多 OCI 错误。当我切换到 root 时,标记用户中存在的环境没有被加载。这就是问题。 当您以标记用户身份运行它时它是否有效?另外仅供参考 - su <user> 不会加载 <user>'s 环境,但 su - <user> 会加载它。 没有仍然相同的错误集。用户确实被更改为标记,但错误仍然存​​在。【参考方案3】:

如果您使用的是 RVM,您可以这样做:

rvm cron setup 

参考: https://coderwall.com/p/vhv8aw/getting-ruby-scripts-working-with-bundler-rvm-and-cron

【讨论】:

注意这个命令会替换你的 crontab,如果你有一些 cronjobs,记得使用crontab -l > somefile.txt备份它们 太棒了,感谢您指出这一点!并且可以确认该命令在 2021 年底仍然有效:)【参考方案4】:

在 centos 上工作

在你的终端执行 # which ruby 这是找到你的红宝石路径

示例输出

/usr/bin/ruby

然后你可以编辑你的 cronjob,使用 crontab -e

* * * * * <strong>/usr/bin/ruby</strong> /home/mark/project/script.rb

然后保存,这只是在我的 centos 服务器上运行。 您可以在编辑 cronjob 之前先使用此命令测试代码

#/usr/bin/ruby /home/mark/project/script.rb

它应该首先工作,然后你可以穿上你的 crontab

【讨论】:

你应该详细说明答案。 哦,好吧,对不起【参考方案5】:

感谢@saihgala 的解决方案,但我对这种方式几乎没有修改。 我将#!/usr/bin/env ruby sting 添加到我的 ruby​​ 可执行文件的开头。

为此文件添加权限,启动 crontab 文件编辑crontab -e

添加*/1 * * * 0-5 /path/to/executable.rb&gt;&gt;/path/to/output.txt 然后它对我有用。

【讨论】:

以上是关于如何通过Cron表达式来获取最近运行时间的主要内容,如果未能解决你的问题,请参考以下文章

cron表达式怎么实现“00:15-23:57每5分钟运行一次”?

AWS CloudWatch 中的 cron 表达式:如何每周运行一次

如何每 2 小时运行一次 cron 作业?

Cron 作业每 x 周和特定日期运行一次 [关闭]

石英调度程序中每30秒的cron表达式?

java Quartz Scheduler cron 表达式每隔 30 分钟后一刻钟