这是我的crontab文件的内容:
0 0,6,12,18 * * * cd /var/www/app/current && backup perform --trigger db_backup --config_file config/backup.rb --data-path db --log-path log --tmp-path tmp >> /var/www/app/current/log/cron.log 2>&1 0 3 * * * cd /var/www/app/current && RAILS_ENV=production bundle exec rake runs:populate --silent >> /var/www/app/current/log/cron.log 2>&1 59 23 * * * cd /var/www/app/current && RAILS_ENV=production bundle exec rake runs:log --silent >> /var/www/app/current/log/cron.log 2>&1
如果我以crontab的所有者的身份手动运行其中任何一项,那么它们可以正常工作,但是cron.log
文件只包含:
/bin/sh: bundle: not found /bin/sh: backup: not found /bin/sh: bundle: not found
我试图包装每一个在下面(默认情况下, 每当我用来pipe理我的cron文件的gem ) bash -l -c '...'
但是我得到了与上述相同的除了bash bash: bundle: command not found
CRON作业的deafultpath通常是/usr/bin:/bin
。 您的命令bundle
和backup
可能不在默认path中。 一个解决scheme是更改您的crontab并包含这些命令的完整path。
0 0,6,12,18 * * * cd /var/www/app/current && /path/to/backup ...
等等。一般来说,在crontabs中使用完整path是个好主意。 如果你想要,你也可以在crontab里面指定PTH
PATH=/bin:/usr/bin:/path/to/your/program 0 0,6,12,18 * * * cd /var/www/app/current && backup ...
是的,您可以在实际的crontablogging之前设置path,例如:
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin: 0 3 * * * run-cron-job