Я уже давно борюсь с этой проблемой.. и я пробовал много решений, таких как:
Почему DBD :: SQLite не может вставляться в базу данных через мой сценарий CGI Perl?
Почему я получаю ошибку sqlite, "невозможно открыть файл базы данных"?
Несколько недель назад я перенес свой сервер с Laravel 4.0 на другой сервер, который теперь является последней версией Laravel 5.0.
На старом сервере у меня есть этот файл Perl, который скребок, который я запускаю с помощью crontab каждые 30 минут, называется getListOfClasses.pl
Используя следующую команду crontab
на моем OLD- сервере, я запустил бы это:
0,30 * * * * /var/www/loop/storage/scripts/getListOfClasses.pl >> /var/www/loop/storage/logs/laravel-scraper.log 2>&1
Который выполняет скребок в /var/www/loop/storage/scripts/getListOfClassesFromSubjects.pl
и записывает в мою базу данных в /var/www/loop/storage/database.sqlite
После моего перемещения Laravel 5.0 изменил местоположение базы данных по умолчанию из storage
в database
, поэтому я отредактировал свой crontab, чтобы отразить это изменение, а также имя базы данных:
my $dbFile = '../storage/database.sqlite';
к новому пути к файлу
my $dbFile = '../../database/database.sqlite';
Если я запустил свой скребок вручную:
/var/www/schedulizer/storage/scripts/getListOfClasses.pl
Я умею хорошо царапать. Однако, если я полагаюсь на crontab для выполнения сценария, я получаю следующие ошибки:
DBI connect('dbname=../../database/database.sqlite','',...) failed: unable to open database file at /var/www/schedulizer/storage/scripts/getListOfClasses.pl line 22.
Строка 22 - это my $dbh = DBI->connect($dsn, $user, $password, {
. Я не верю, что эта строка кода релевантна - я думаю, что у моего сервера есть проблемы с записью в эту базу данных.
Разрешения, которые имеет моя база данных SQLite, следующие:
-rwxrwxrwx 1 www-data root 8845312 Nov 3 00:05 database.sqlite
Папка, в которой существует база данных, имеет следующие разрешения:
drwxr-xr-x 5 www-data root 4096 Nov 3 00:05 database
Эти уровни разрешений все совпадают с уровнями моего старого разрешения сервера как для файла базы данных, так и для папки. Я также пробовал chown
и chmod 777
в файле базы данных, чтобы он имел все разрешения. Еще не повезло.
Кто-нибудь знает почему?
При тестировании вручную вы, вероятно, перешли к правильному рабочему каталогу для сценария для редактирования. Запуск его из любого другого места, скорее всего, также вызвал сбой.
cd/some/where ;
перед вашей командой в кронтабе. Cron устанавливает домашний каталог, независимо от того, где находится вызываемая программа.Второе предложение - это более переносимое, поскольку оно не требует изменений скриптов при изменении местоположения или машины; вы просто приспосабливаете его в своем (машинный) crontab.