![](/img/trans.png)
[英]PHP will not write file to directory via command prompt executed script but will write when executed in browser
[英]Perl script unable to write to database when executed in crontab despite being able to write if executed manually
我已经为这个问题努力了一段时间。并且我尝试了许多解决方案,例如:
几周前,我将服务器从Laravel 4.0迁移到了另一个服务器,该服务器现在是Laravel 5.0的最新版本。
在旧服务器中 ,我有一个Perl文件,这是一个刮板,我每隔30分钟使用crontab运行一次,名为getListOfClasses.pl
在我的OLD服务器上使用以下crontab
命令,我将运行此命令:
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 ;
在crontab中的命令之前。 无论被调用程序位于何处,Cron都会设置您的主目录。 第二个建议是恕我直言,因为它在更改位置或机器时不需要更改脚本;因此,它更便于移植。 您只需在您的(特定于计算机的)crontab中调整它即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.