在crontab报告数据库中运行的脚本在手动运行时丢失错误不会导致问题

时间:2015-08-04 16:46:31

标签: database perl sqlite crontab

我有一个脚本,我每小时都会在我的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

仍然是同一个问题

1 个答案:

答案 0 :(得分:3)

对于数据库的路径,您的代码使用相对路径,该路径假定当前目录是脚本所在的目录。事实并非如此。

而不是

"../database.sqlite"

使用

use FindBin qw( $RealBin );
"$RealBin/../database.sqlite"

use FindBin qw( $RealBin );
chdir($RealBin);
"../database.sqlite"