Это содержимое моего файла 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
Я пробовал обернуть каждый из них следующим образом (по умолчанию всякий раз, когда драгоценный камень который я использую для управления своим файлом cron) bash -l -c '...'
но тогда я получаю то же самое, что и выше, за исключением bash bash: bundle: command not found
Глухой PATH для заданий CRON обычно /usr/bin:/bin
. Ваши команды bundle
и backup
скорее всего, не находятся в пути по умолчанию. Одно из решений - изменить ваш crontab и указать полный путь к этим командам.
0 0,6,12,18 * * * cd /var/www/app/current && /path/to/backup ...
и т.д. В целом рекомендуется использовать полные пути в crontabs. Если вы хотите, вы также можете указать PTH внутри crontab
PATH=/bin:/usr/bin:/path/to/your/program
0 0,6,12,18 * * * cd /var/www/app/current && backup ...
Да, вы можете установить путь до фактических записей crontab, например:
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:
0 3 * * * run-cron-job