当前位置: 代码迷 >> 综合 >> Linux cron 避坑指南
  详细解决方案

Linux cron 避坑指南

热度:74   发布时间:2023-12-19 09:11:35.0

场景

好多系统中会用到邮件系统,我们假设有一个 PHP 脚本用来发送邮件。使用 Linux cron 每分钟执行一次

我们暂时不引入队列系统,其实使用队列处理此方式更优。

我们得到下面的基本配置

* * * * * php /home/app/email.php

问题分析和解决

如果这个邮件服务出现异常,进程僵死怎么办?

假设由于未知因素, email.php 脚本一直执行,没有退出。极端的情况,进入一个 while 死循环。

这下倒好,原来说好的一分钟执行一次,现在一直死这边了,后面的脚本也不能跑了


解决办法:

使用 timeout,假设我们设定每个脚本最多执行时间位 200秒,超过 200秒 就自动死掉。

* * * * * timeout 200 php /home/app/email.php

如果这个脚本执行时间超过 60秒,下一分钟又会执行 php email.php,如果避免重复执行?

这样会出现,有两个进程同时在执行 php email.php,那会不会出现同一个任务被执行了两次?


解决办法:

使用 flock 进行互斥控制

用法:flock [选项] <文件|目录> <命令> [<参数