我有一个脚本,我每小时都会在我的Laravel中手动运行这个脚本:
/var/www/name/storage/scripts/getListOfClassesFromSubjects.pl
我通常做的是,我cd到/scripts/
,我手动运行:
./getListOfClassesFromSubjects.pl
脚本运行正常。
今天,我设置了一个crontab来自动执行此操作(显然)。
0,30 * * * * /var/www/name/storage/scripts/getListOfClassesFromSubjects.pl >> /var/www/name/storage/logs/schedulizer.log 2>&1
在我的日志中是:
DBD::SQLite::db prepare failed: no such table: subject_urls at /var/www/loop/storage/scripts/getListOfClassesFromSubjects.pl line 56.
这是一个异常,因为当我手动运行脚本时,没关系。
这是我数据库的权限:
-rw-r--r-- 1 root root 11750400 Aug 4 12:30 database.sqlite
所以我认为这是rwx权限的问题,所以我将数据库更改为755:
-rwxr-xr-x 1 root root 11750400 Aug 4 12:30 database.sqlite
仍然是同一个问题
答案 0 :(得分:3)
对于数据库的路径,您的代码使用相对路径,该路径假定当前目录是脚本所在的目录。事实并非如此。
而不是
"../database.sqlite"
使用
use FindBin qw( $RealBin );
"$RealBin/../database.sqlite"
或
use FindBin qw( $RealBin );
chdir($RealBin);
"../database.sqlite"