每 10 分钟 cronjob 进行文件转换

Posted

技术标签:

【中文标题】每 10 分钟 cronjob 进行文件转换【英文标题】:file conversion every after 10 minutes cronjob 【发布时间】:2018-05-12 16:39:28 【问题描述】:

我添加了一个 cron 作业以在每 10 分钟后执行一个脚本,该脚本检查是否有任何新文件上传到目录,如果有新文件,则它将视频文件转换为像我一样的小尺寸命令中给出..

以下是我尝试过的代码,一切正常,我也尝试添加电子邮件功能并且它可以工作,但没有执行 ffmpeg 命令

$last = (int)file_get_contents('timestamp.txt');
file_put_contents('timestamp.txt', time());
$files = glob('videos/*.mp4');
$files = array_filter($files, function($file)  
    return filemtime($file) > $last; 
);

if ($files) 
    foreach ($files as $sfile) 
        $sfile = str_replace('videos/', '', $sfile);
        $video = 'videos/'.escapeshellcmd($sfile);
        $sixty = "videos/250/".escapeshellcmd($sfile);
        $cmdform = "ffmpeg -i $video -vf scale=250:140 $sixty";
        $do = `$cmdform`;
    

另一件事是它转换具有静态名称的文件,例如如果我给出“videos/1.mp4”,那么它可以工作,但在 foreach 循环中不起作用。

和设置cron作业的命令

*/10 * * * * wget http://mywebsite.com/coding.php

非常感谢。

【问题讨论】:

foreach 循环中做一些echo 以检查它是否被迭代,同时打印$do 以检查响应是什么。 它没有打印任何想法,谢谢。但是解决方案是什么? 而不是echo 尝试error_log,并检查错误日志。我猜在第一次迭代中出现了问题,导致迭代停止。先找到问题,再想办法。 一切正常,我检查使用将 url 放入网络浏览器并执行命令,但它在 cron 作业中不起作用。 它使用 shell_exec($cmd) 工作,谢谢! 【参考方案1】:

如果你想执行外部命令,你可以使用php bellow cmd

exec('cmd')

例如:

<?php    
echo exec('whoami');
?>

输出:你的机器名

在你的情况下是

...
...
...
$cmdform = "ffmpeg -i $video -vf scale=250:140 $sixty";
$do = exec($cmdform);

希望对你有用

【讨论】:

你有什么错误吗?你在尝试哪个操作系统? 尝试 var_dump(exec($cmdform)) ;

以上是关于每 10 分钟 cronjob 进行文件转换的主要内容,如果未能解决你的问题,请参考以下文章

每分钟运行一次cronjob的风险

每分钟 Cronjob

如何每 X 分钟运行一次 cronjob?

如何每分钟更频繁地运行 Cronjobs?

每 5 分钟运行一次 Cron 作业,持续 10 秒

Hadoop Avro 文件大小问题