![](/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.