【问题标题】:Cron Job not working for shell script or ruby script mac osCron 作业不适用于 shell 脚本或 ruby​​ 脚本 mac os
【发布时间】:2020-03-06 01:47:18
【问题描述】:

我有一个名为 automated_script.rb 的 ruby​​ 脚本

我还有一个叫做automated_script.sh的shell脚本

目前这两个文件都位于我的桌面上。

每当我运行 ruby automated_script.rb 时,脚本都会按预期工作(它所做的只是使用 twilio api 发送短信)

这就是我在automated_script.sh中的内容

#!/bin/zsh

/Users/angelgarcia/.rvm/rubies/ruby-2.6.3/bin/ruby /Users/angelgarcia/Desktop/automated_script.rb 

当我在终端导航到我的桌面并运行时,./automated_script.sh 它可以工作。

当我简单地运行时:

/Users/angelgarcia/.rvm/rubies/ruby-2.6.3/bin/ruby /Users/angelgarcia/Desktop/automated_script.rb 

在终端中,这也可以。

但是,在我的 crontab 中,我有这个:

* * * * * /Users/angelgarcia/Desktop/automated_script.sh

这没有按预期工作。

只需运行此程序即可:/Users/angelgarcia/Desktop/automated_script.sh 但是由于某种原因,当我把它放在 crontab 中时,它并不是每分钟都运行。

当我在终端中运行 crontab -l 时,我得到了这个:

* * * * * /Users/angelgarcia/Desktop/automated_script.sh

所以我知道它是活跃的。

感谢任何帮助,谢谢!

编辑

这是我的 ruby​​ 文件里面的内容

require 'twilio-ruby'

account_sid = 'xxx'
auth_token = 'xxx'
@client = Twilio::REST::Client.new account_sid, auth_token

@client.messages.create(
  from: '999',
  to: '999',
  body: message 
)

【问题讨论】:

  • 您可以检查 cron 日志文件中的错误。一个常见的错误是使用相对路径而不是绝对路径,例如在您的automated_script.rb 中。
  • 如果我们能看到automated_script.rb在做什么也可能会有所帮助。
  • @Sergio 我会试着检查一下,谢谢
  • @lacostenycoder 我已经添加了 ruby​​ 脚本
  • crontab 是否配置为您尝试直接运行的同一用户?在某些情况下,如果用户不同,可能是权限问题

标签: ruby macos shell cron


【解决方案1】:

你不需要 shell 从 cron 执行 ruby​​。您应该能够将 ruby​​ 和一个文件传递给您的 crontab。

* * * * * ruby /Users/angelgarcia/Desktop/automated_script.rb 

注意,这将使用您设置的默认系统 ruby​​ 版本。

【讨论】:

  • 无论如何我可以运行 shell 吗?我使用 shell 脚本作为包装器,因为我想有条件地运行该 ruby​​ 脚本。这种情况的一部分与操作系统有关,我觉得使用 shell 脚本比使用 ruby​​ 脚本更容易访问。
  • 在 shell 中如何更容易?另外,你怎么能假设运行你的脚本的用户正在运行 zsh ?你能发布你的shell脚本代码吗?有关如何在 ruby​​ 中检查操作系统的信息,请参阅此问题的答案。 stackoverflow.com/questions/170956/…
  • 脚本仅供我在我的机器上运行,我说的是操作系统,但也许我应该更具体一些。更多的是看看我在终端上做什么。我觉得使用 shell 脚本执行这些检查更舒服,我宁愿选择那个选项。此外,与我想使用 shell 脚本这一事实无关,你给我的答案是行不通的。
  • @AngelGarcia 请检查rvm list 的输出。如果默认 ruby​​ 版本正确设置为 ruby​​ 脚本所需的相同版本,并且脚本可能需要的 gem 安装在该版本中,则不需要传递 ruby​​ 二进制文件的完整路径。如果默认的 ruby​​ 版本不匹配,您的 ruby​​ 脚本可能会失败。此外,您还需要确保您的 shell 脚本已成为可执行文件。 chmod +x automated_script.sh.
猜你喜欢
  • 1970-01-01
  • 2021-11-16
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 2016-03-19
  • 1970-01-01
相关资源
最近更新 更多