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

Posted

技术标签:

【中文标题】如何创建一个 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 作业来运行 ruby​​ 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置系统来告诉我 cron 作业是不是运行不正常?

如何防止 cron 作业执行(如果它已经在运行)

Ruby on Rails Cron 作业示例

Cron 作业——每 5 秒运行一次

如何确保 cron 作业能够运行?

如何使用 PHP 创建 cron 作业?