deleteDirectory不能用作Cron作业

时间:2015-08-24 13:52:07

标签: bash laravel cron schedule delete-directory

我有一个工作,我希望cron以给定的时间间隔运行,这会从我的数据库中删除一些旧条目,然后删除使用db条目上传的文件。

如果我从终端运行任务它工作正常,(删除数据库条目和上传的文件)。但是当我将任务留给cron时,它会删除数据库中的条目,但它不会删除我公共目录中的上传文件夹。

删除文件的代码如下所示

$machtiging = File::files('icec/'.$icecconsult->accesstoken.'            /machtiging');

if(count($machtiging) > 0){
    File::deleteDirectory(public_path() . '/icec/'.$icecconsult->accesstoken);
}

所以它看起来是否存在,如果有,删除它们,但这只是不起作用,我已经尝试将cron作业以root用户,www-data和我的用户运行,都具有相同的结果。文件和文件夹权限我已将它们设置为777以确定,但这似乎不是问题。

我也试过添加shell = / bin / bash,但这并没有做到这一点

非常感谢任何有关解决此问题的帮助

更新 crobline看起来像这样

* * * * * /bin/bash /home/ice/verlopenicec.sh >> /tmp/output 2&>1

也尝试了

* * * * * /home/ice/verlopenicec.sh >> /tmp/output 2&>1

* * * * * /usr/bin/php /var/www/wemedic/artisan verwijder-verlopen-icec-consult 1>> /dev/null 2>&1

所有人似乎都在奔跑。它只是它没有删除或移动它需要的目录 尝试获取一些调试数据,但没有任何显示

verlopenicec.sh脚本本身看起来只是对laravel应该运行的原始脚本的说法。 thouth可能很方便制作一个脚本来测试为什么laravel aint删除目录。

脚本看起来像这样

#!/bin/bash
SHELL=/bin/bash
USER=ice
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

/usr/bin/php /var/www/wemedic/artisan verwijder-verlopen-icec-consult

运行一个看起来像这样的laravel命令

    $icecconsult = Icecconsult::where('id', '=', $consult_id)->firstOrFail();
    $icecconsult->expire = Carbon::now();
    $icecconsult->status = 'Gesloten';
    $icecconsult->save();

    $icec = Icec::where('id', '=', $icecconsult->icec_id)->firstOrFail();
    $icec->delete();

    $machtiging = File::files('icec/'.$icecconsult->accesstoken.'/machtiging');

    if(count($machtiging) > 0){
//            File::deleteDirectory(public_path() . '/icec/'.$icecconsult->accesstoken);
        $move = 'mv /var/www/wemedic/public/icec/'.$icecconsult->accesstoken.'  /tmp' ;
        shell_exec('SHELL=/bin/bash');
        shell_exec('PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games');

        shell_exec($move);
//             File::deleteDirectory('/var/www/wemedic/public/icec/'.$icecconsult->accesstoken);
    }


    return;

(我已经注释掉删除功能,并尝试将其移动到临时目录,但移动或删除时具有相同的结果。两者都工作如果我直接运行它,但不是当cron运行它时.Cron确实运行任务因为我可以看到它在/ var / log / syslog中被触发并且数据库entru确实被更改了) 我尝试删除,然后将其移动到临时文件夹,如果我直接运行它们都可以工作,但是当我把它留给cron / laravel cron scheduler时都没有工作

如果还尝试从delete函数中获取响应(tru / false),但是当我尝试将其保存到db以查看它时,该函数似乎无法执行。

dd($ machtiging)返回一个如下所示的数组,显示文件夹中的文件,在知道文件夹中有文件后,它应该继续删除整个文件夹,其中包含任何文件/子目录< / p>

array:1 [▼
0 => "icec/a89ce4c9010e0a745308b29782b5eeae/machtiging/machtiging.pdf"
]

谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

尝试使用此crontab:

*/1 * * * * ice /bin/bash /home/ice/verlopenicec.sh >> /tmp/output.log

将您的bash脚本更改为:

#!/bin/bash
moment="`/bin/date +%y_%m_%d`"
echo "--- The script has been executed on $moment ---"
/usr/bin/php /var/www/wemedic/artisan verwijder-verlopen-icec-consult

它应该更好用,但如果没有,你可以在这里粘贴你生成的/tmp/output.log的内容吗?