Я на 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');
или где бы это ни было. Также проверьте журналы, чтобы узнать, какие сообщения об ошибках вы получаете