【问题标题】:How to run a script from crontab and avoid "LoadError"如何从 crontab 运行脚本并避免“LoadError”
【发布时间】:2020-05-06 17:56:14
【问题描述】:

我想从 Mac OS 上的 crontab 运行我的脚本,但我收到了一个错误:

ruby: Operation not permitted -- /Users/vitalii/Desktop/Home/update/update.rb (LoadError)

我对 cron 任务和设置的偏好是使用 rvm cron setup 创建的:

#sm start rvm
PATH="/Users/vitalii/.rvm/gems/ruby-2.4.1/bin:/Users/vitalii/.rvm/gems/ruby-2.4.1@global/bin:/Users/vitalii/.rvm/rubies/ruby-2.4.1/bin:/Users/vitalii/.rvm/gems/ruby-2.4.1/bin:/Users/vitalii/.rvm/gems/ruby-2.4.1@global/bin:/Users/vitalii/.rvm/rubies/ruby-2.4.1/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Applications/Postgres.app/Contents/Versions/latest/bin:/Users/vitalii/.rvm/bin"
GEM_HOME='/Users/vitalii/.rvm/gems/ruby-2.4.1'
GEM_PATH='/Users/vitalii/.rvm/gems/ruby-2.4.1:/Users/vitalii/.rvm/gems/ruby-2.4.1@global'
MY_RUBY_HOME='/Users/vitalii/.rvm/rubies/ruby-2.4.1'
IRBRC='/Users/vitalii/.rvm/rubies/ruby-2.4.1/.irbrc'
RUBY_VERSION='ruby-2.4.1'
#sm end rvm

* * * * * ruby /Users/vitalii/Desktop/Home/update/update.rb >> /Users/vitalii/Desktop/logfile.txt 2>&1

我用chmod 777 给了每个文件执行的权限,但是没有任何更改,并且重复错误。

文件update.rb的内容是

puts 'Hello, World!!!'

谁能告诉我发生了什么以及我做错了什么?

【问题讨论】:

  • 我之前没用过rvm cron setup,是不是和crontab -e打开的crontab一样?如果是这样,您可以尝试通过注释环境变量并使用完整的 ruby​​ 路径 /bin/ruby/home/<user>/.rvm/rubies/ruby-x.x.x/bin/ruby
  • /Users/vitalii/Desktop/Home/update 真的存在吗? Home 是可疑的,因为通常我们不会有一个名为它的目录,但我们确实有一个名为 $HOME 的环境变量,它等效于 ~/Users/vitalii。请注意,它与您将输出重定向到的位置不同:/Users/vitalii/Desktop/logfile.txt
  • @theTinMan,Home 这是我的主目录项目,是的,我在项目中使用了她。 Logfile.txt 会有所不同,因为它位于不同的位置。
  • @Vitalii :错误消息意味着 Ruby 在加载文件时遇到了EPERM 错误。如果您从命令行运行相同的命令,它会起作用吗? ruby -e 'puts "hello"' >> ... 在你的 crontab 中可以工作吗?

标签: ruby bash shell cron rvm


【解决方案1】:

我找到了解决方案,因为我使用的是 Mojave。
我需要在系统中进行额外的设置。谁曾想到 ... enter link description here

事实证明这是一个问题,因为您需要允许 cron 权限。 并更正 crontab -e 的运行命令,this
* * * * * /bin/bash -l -c 'ruby /Users/vitalii/Desktop/Home/update/update.rb'

【讨论】:

    【解决方案2】:

    通过crontab -e设置crontab作业或将它们放入/etc/crontab时有一点区别

    $ crontab -e
    # m h dom mon dow command
      * *   *  *  *   echo ok
    
    $ nano /etc/crontab
    # m h dom mon dow user command
      * *   *  *  *   root echo ok
    

    是这样吗?

    【讨论】:

    • 不完全是。问题出在 mojave 本身,您需要在系统中安装几个设置
    猜你喜欢
    • 2017-11-20
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2015-10-05
    • 2017-12-16
    相关资源
    最近更新 更多