Запуск PHP через работу Cron

Я на Ubuntu и имею небольшой сценарий резервного копирования, который я пытался запустить. К сожалению, он не выполняет резервное копирование. Я включил два сценария PHP здесь, если у меня что-то не хватает.

Во-первых, вот как выглядит мой crontab

*/30 * * * * /usr/bin/php /var/www/mybackup.php 

Предполагается, что cron, который должен назвать этот скрипт: mybackup.php

  <?php include('myfunctions.php'); theBackup(); ?> в  <?php include('myfunctions.php'); theBackup(); ?> 

Главный сценарий – это. Хотя он работает отлично, когда я вручную запускаю его, но он не работает с cron.

 <?php /* * Script to back up the database * * */ function getAllFiles($directory, $recursive = false) { $result = array(); $handle = opendir($directory); while ($datei = readdir($handle)) { if (($datei != '.') && ($datei != '..')) { $file = $directory.$datei; if (is_dir($file)) { if ($recursive) { $result = array_merge($result, getAllFiles($file.'/')); } } else { $result[] = $file; } } } closedir($handle); return $result; } function getOldestTimestamp($directory, $recursive = true, $display ='file') { $allFiles = getAllFiles($directory, $recursive); $highestKnown = time(); $highestFile = ''; foreach ($allFiles as $val) { $currentValue = filemtime($val); $currentFile = $val; if ($currentValue < $highestKnown){ $highestKnown = $currentValue; $highestFile = $currentFile; } } if($display=='file'){ return $highestFile; } else { return $highestKnown; } } function theBackup(){ $sendfrom = "System Backup <admin@domain.com>"; $headers = 'Admin <admin@domain.com>' . "\n"; $headers .= 'MIME-Version: 1.0' . "\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\n"; $filename = getOldestTimestamp('./app/db/',true,'file'); $filename = str_replace("./app/db/", "", $filename ); $backupfile = '/var/www/app/db/'.$filename; $handle = fopen($backupfile, 'w') or die('Cannot open file: '.$backupfile); $dbhost = "localhost"; $dbuser = "user"; $dbpass = "password"; $dbname = "db"; if(system("mysqldump -h $dbhost -u $dbuser -p$dbpass $dbname > $backupfile") == false){ mail('email@yahoo.com','My Backup','Back Up successfully completed',$headers ); }else { mail('email@yahoo.com','My Backup','Back Up did NOT complete successfully please check the file/folder permission',$headers ); } } ?> 

Есть ли что-то, чего я не вижу в коде выше? Как я уже сказал, когда я запускаю mybackup.php из браузера, он работает отлично, но не через cron.

Любая помощь будет высоко оценен.

Вы используете абсолютный путь для запуска php в задании cron

 */30 * * * * /usr/bin/php /var/www/mybackup.php 

И URL-адрес включения относительный

 include('myfunctions.php'); 

Попробуйте использовать абсолютный URL для включения.

Я думаю, вам понадобится полный путь к вашему включению, где вы говорите:

 include('myfunctions.php'); 

должно быть похоже

 include('/var/www/myfunctions.php'); 

или где бы это ни было. Также проверьте журналы, чтобы узнать, какие сообщения об ошибках вы получаете