我正在使用whenever
宝石生成 cron 命令。我可以使用 检查这些命令crontab -l
。生成的命令是
24 15 * * * /bin/bash -l -c 'cd /Users/Chris/Sites/covid_tracker && RAILS_ENV=development bundle exec rake countries:temp --silent >> log/cron.log 2>&1'
24 15 * * * /bin/bash -l -c 'echo '\''should see this in the log'\'' >> log/cron.log 2>&1'
第一个命令 (bundle exec rake) 运行,我可以在 cron.log 中看到输出。但是,我在 cron.log 中没有看到第二个命令 (echo) 的输出。
我希望 echo 命令(以及我想要使用的其他 bash 命令)在与命令相同的目录中运行bundle exec rake
,并且权限与我从该目录发出命令时相同。我该怎么做?
答案1
您可以在命令前加上与第一个命令相同的前缀cd /Users/Chris/Sites/covid_tracker &&
。这会在运行命令之前将工作目录更改为该目录。另一种选择是在该目录中创建一个 shell 脚本并运行它。例如:
24 15 * * * cd /Users/Chris/Sites/covid_tracker && ./runCron.sh >> log/cron.log 2>&1
运行Cron.sh:
#!/bin/bash -l
cd /Users/Chris/Sites/covid_tracker
RAILS_ENV=development bundle exec rake countries:temp --silent
echo "should see this in the log"
(我不确定为什么您使用 -l 参数指定了登录 shell,这是否是 rake 所必需的?)