我在一个基于 Rails 的网站上工作,我必须使用sitemap_generator
gem 创建一个站点地图。
到目前为止一切顺利,直到我到达必须自动化站点地图生成的部分。我需要运行以刷新站点地图的 2 个命令是direnv allow && rake sitemap:refresh
.
我正在尝试使用whenever
gem 创建一个 cron 作业,这就是我里面的内容config/schedule.rb
:
# config/schedule.rb
set :output, "tmp/cron.log"
set :environment, "development"
every 1.minutes do
command "/Users/<user>/<project>/generate_sitemap.sh"
end
该generate_sitemap.sh
文件位于项目根目录中,内容如下:
# generate_sitemap.sh
#!/bin/bash
direnv allow
rake sitemap:refresh
为了激活 cron 作业,我whenever --update-crontab
在终端中执行。通过运行crontab -l
,我有以下输出:
# Begin Whenever generated tasks for: /Users/<user>/<project>/config/schedule.rb at: 2022-01-27 18:51:18 +0200
* * * * * /bin/bash -l -c '/Users/<user>/<project>/generate_sitemap.sh >> tmp/cron.log 2>&1'
# End Whenever generated tasks for: /Users/<user>/<project>/config/schedule.rb at: 2022-01-27 18:51:18 +0200
我必须提到,如果我./generate_sitemap.sh
从命令行执行,它可以工作。此外,如果我按如下方式创建 cron 作业
config/schedule.rb
:
# config/schedule.rb
set :output, "tmp/cron.log"
set :environment, "development"
every 1.minutes do
rake "sitemap:refresh"
end
direnv allow
它已执行,但由于未事先执行而导致错误。
我的问题是:如何创建一个同时执行direnv allow
和的 cron 作业rake sitemap:refresh
?