Не можете выполнить команду из crontab? - PullRequest
4 голосов
/ 15 июня 2011

Я хочу обновлять некоторые вещи в своей базе данных каждый день в 16:00.

Поэтому я использую команду crontab, которая выполняет мой файл file.php, который запускает обновление. Он отлично работает, когда я выполняю команду в bash, но есть проблема с crontab.

кронтаб:

00 16 * * * ./etc/cron.daily/maj_cat

maj_cat

php var/www/dev/update.php

Спасибо!

Ответы [ 4 ]

3 голосов
/ 15 июня 2011

. / Etc / cron.daily / maj_cat - это относительный путь, и var / www / dev / update.php тоже попробуйте:

00 16 * * * /etc/cron.daily/maj_cat

и maj_cat:

php /var/www/dev/update.php

Для вас можно сделать:

00 16 * * * /usr/bin/env php /var/www/dev/update.php
1 голос
/ 15 июня 2011

вероятно, crondeaemon не использует переменную PATH, которая устанавливается, когда вы делаете это вручную.Убедитесь, что php находится в пути (в заголовке вашего crontab).

В противном случае вы можете попробовать использовать абсолютные пути в вашем скрипте.

1 голос
/ 15 июня 2011

Вы можете использовать полный путь к PHP,

введите: whereis php

Обычно PHP находится в / usr / bin / php

, что приводит к:/ usr / bin / php /var/www/dev/update.php

Я считаю полезным проверить, что crontab выполняется путем вывода в файл, так что вы знаете, что cron действительно выполняется,что-то вроде:

/ usr / bin / php /var/www/dev/update.php> output.txt

Вероятно, лучше поставить косую черту перед "var"как я показал выше.

0 голосов
/ 15 июня 2011

Cron использует профиль по умолчанию при запуске cronjobs, который, вероятно, будет иметь переменную PATH, отличную от той, которую вы используете при входе в систему. Вы можете загрузить свой собственный профиль в начале cronjob, чтобы убедиться, что среда cronjob соответствует вашейВы вошли в среду.

Вы можете загрузить свой профиль следующим образом:

00 16 * * * ~/.profile; ./etc/cron.daily/maj_cat
...