如何通过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 ruby
、which 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>>/path/to/output.txt
然后它对我有用。
【讨论】:
以上是关于如何通过Cron表达式来获取最近运行时间的主要内容,如果未能解决你的问题,请参考以下文章
cron表达式怎么实现“00:15-23:57每5分钟运行一次”?