0

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

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

删除文件的代码如下所示

$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 应该运行的原始脚本的引用。制作一个脚本来测试为什么 laravel 不删除目录可能会很方便。

脚本看起来像这样

#!/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 调度器

如果还尝试从删除函数中获取响应(tru/false),但是当我尝试将其保存到数据库以查看它时,该函数似乎没有执行。

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

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

谢谢你的帮助

4

1 回答 1

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 的内容吗?

于 2015-08-25T12:38:10.460 回答