我对cron有些奇怪。我的目标是检查用户的新帖子,并为每个用户注册cron作业。 cron中的最小时间单位是分钟,但我必须尽可能经常检查。所以我找到了使用sleep
注册几个cron作业的解决方案,并在每10秒后检查一次用户。我使用了以下内容:
$user->register_cron('curl "http://app.dreamasik.com/api/insta/gatherPosts/' . $user->id . '"', '* * * * *');
$user->register_cron('curl "http://app.dreamasik.com/api/insta/gatherPosts/' . $user->id . '"', '* * * * * sleep 10');
$user->register_cron('curl "http://app.dreamasik.com/api/insta/gatherPosts/' . $user->id . '"', '* * * * * sleep 20');
$user->register_cron('curl "http://app.dreamasik.com/api/insta/gatherPosts/' . $user->id . '"', '* * * * * sleep 30');
$user->register_cron('curl "http://app.dreamasik.com/api/insta/gatherPosts/' . $user->id . '"', '* * * * * sleep 40');
$user->register_cron('curl "http://app.dreamasik.com/api/insta/gatherPosts/' . $user->id . '"', '* * * * * sleep 50');
注册cron功能:
public function register_cron($url, $period = '* * * * *'){
$output = shell_exec('crontab -l');
file_put_contents('/tmp/crontab.txt', $output.$period.' '.$url.PHP_EOL);
exec('crontab /tmp/crontab.txt');
}
当它刚刚创建时,它在cron面板中看起来很棒,正如我所提到的那样。邮件立即收集。但现在我发现分钟有一些变化(*
成为*/22
等):
*/23 * * * * curl "http://app.dreamasik.com/api/insta/gatherPosts/103"
*/21 * * * * sleep 10 curl "http://app.dreamasik.com/api/insta/gatherPosts/103"
*/24 * * * * sleep 20 curl "http://app.dreamasik.com/api/insta/gatherPosts/103"
*/16 * * * * sleep 30 curl "http://app.dreamasik.com/api/insta/gatherPosts/103"
*/22 * * * * sleep 40 curl "http://app.dreamasik.com/api/insta/gatherPosts/103"
*/23 * * * * sleep 50 curl "http://app.dreamasik.com/api/insta/gatherPosts/103"
我删除了所有cron作业,然后再次注册,但问题出现在第二天。