2016-06-03 2 views
2

Я написал сценарий php, который создает резервную копию базы данных mysql и запускает ее ежедневно, используя crontab на сервере Ubuntu, но сценарий никогда не выполняется (по крайней мере Ну, это похоже).PHP-скрипт не запускается как задание cron на сервере Ubuntu

  • Сценарий называется backup.php.
  • Создает резервную копию (sql в архиве gz) и сохраняет ее в папке/резервной копии.
  • Он добавляет несколько строк текста в /backup/log.txt.

Скрипт вызывается в кронтабе для корневого пользователя, как это (Sudo кронтаб -e):

* * * * * php -f /var/www/cmdb/backup.php 

(время должно быть скорректировано, но это для целей тестирования.)

Ничего не произошло. Файл не создается, журнал не изменяется.

Однако все из следующих тестов успеха:

  • Запуск сценария непосредственно в консоли с помощью php backup.php
  • Запуск хрон: * * * * * php -v > /var/www/cmdb/backup/php-v.txt
  • Запуск хрон: * * * * * php -f /var/www/cmdb/test.php > /var/www/cmdb/backup/text.txt (написание строки в файл)

Я думаю, что эти испытания показывают, что:

  • backup.php скрипт работает без ошибок
  • Cron запущен
  • Резервной папка записываемая
  • команды PHP доступна из кронтаба

Итак, почему не делает backup.php что-нибудь при запуске от crontab?

+0

Привет, Пол, у вас есть несколько выходов (эхо, печать, print_r и т.д.) для целей отладки в коде? Это может остановить выполнение кода при запуске в качестве запланированной задачи. –

+1

Вы проверили, является ли скрипт php исполняемым? Что говорят журналы? Что в скрипте? Помните, что пути в скрипте должны быть полными, а не относительными. – fedorqui

+0

Без каких-либо результатов регистрации/ошибок мы не можем помочь. Одна очевидная вещь - это то, что пользователь является скриптом PHP, выполняющимся, как при запуске cron? Имеет ли он разрешения, необходимые для выполнения своей работы? – GordonM

ответ

1

Как видно в комментариях, проблема заключалась в пути в пределах вашего сценария: вы хотите использовать /var/www/cmdb/backup и просто написал backup, потому что вы предположили, что это было хорошо, так как скрипт запускается в том же каталоге.

Итак, в общем, никогда не предполагайте пути в ваших скриптах из crontab: cron работает в очень ограниченной среде, а его рабочий путь обычно равен /root или просто /. Поэтому все, что у вас есть в вашем скрипте, позволяет использовать полный путь.

Или, в противном случае перейти к пути, а затем запустить скрипт:

* * * * * cd /var/www/cmdb/ && php -f backup.php 
0

Не могли бы вы попробовать запустить команду непосредственно из командной строки для проверки вывода?

php -f /var/www/cmdb/backup.php

Не могли бы вы попробовать быть явно с расположением PHP?

* * * * * /usr/bin/php -f /var/www/cmdb/backup.php