【问题标题】:Backup a Ruby in Rails app (Gitlab) with Cron job使用 Cron 作业在 Rails 应用程序 (Gitlab) 中备份 Ruby
【发布时间】:2014-07-10 23:00:00
【问题描述】:

我尝试使用由 CRON 作业触发的 bash 脚本备份我的 gitlab 项目(它基于 ROR)。

bash 脚本没有问题,但 rake 迁移返回错误:

gitlabBackUp.sh: 12: /home/backup/scripts/gitlabBackUp.sh:捆绑:未找到

这是我在 gitlabBackUp.sh 中的做法

# Export the data
bundle exec rake gitlab:backup:create --trace RAILS_ENV=production

我尝试不使用bundle exec,但它返回了

/home/backup/scripts/gitlabBackUp.sh: 14: /home/backup/scripts/gitlabBackUp.sh: rake: 未找到

有什么建议吗?

编辑

我终于让 cron 任务开始工作了:

/usr/local/bin/bundle exec /usr/local/bin/rake gitlab:backup:create --trace RAILS_ENV=production

【问题讨论】:

  • 你是在使用 gitlab 综合还是“手”安装 gitlab?如果您使用omnibus,请不要使用bundle exec rake gitlab:backupgitlab-rake gitlab:backup
  • 当我手动启动脚本时,命令bundle exec rake gitlab:backup 有效,但我不使用 CRON
  • 好的,然后检查启动CRON 的用户的PATH env var:在我的情况下,在旧的手动 gitlab 安装上,当调用 sudo bundle exec rake ... 时它正在工作,但是当我作为 root 时叫bundle exec rake...它说rake: not found。问题是我的root 用户在他的PATH 中没有 ruby​​、bundle、gem 和 co

标签: ruby-on-rails bash cron gitlab


【解决方案1】:

PATH 可能没有在 cron 中很好地指定。你可以:

1) 使用-l 调用(执行)bash,例如exec bash -l /path/to/real-script.sh

或者直接在 cron 中,例如 0 16 * * * /bin/bash -l '/home/backup/scripts/gitlabBackUp.sh'

2) 明确指定 bundle 和 rake 的路径,例如/usr/local/bin/bundle exec /usr/binrake gitlab:backup:create --trace RAILS_ENV=production

您可以通过which bundlewhich rake随时知道bundlerake的位置;或type -P bundletype -P rake

【讨论】:

  • 好的,我把路径放到绝对路径。 -lfor 是什么?
  • @angezanetti -l Bash 选项使其调用 Bash,就好像它正在尝试登录用户并使其调用启动文件,如 /etc/profile 等。这些文件需要正确初始化变量,包括 PATH。
  • 好的,con 是 root 拥有的,所以我需要 -l 吗?
  • @angezanetti Cron 由 root 拥有并不会影响它没有初始化的启动变量并且不会将任何变量导出到 Bash 的事实。这就是为什么你必须像登录会话一样初始化 Bash 才能很好地调用这些正确的 PATH 值。
猜你喜欢
  • 2018-09-13
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 2013-06-14
  • 1970-01-01
  • 2021-05-28
相关资源
最近更新 更多