我有一个 Perl 脚本
- 查询数据库以获取要处理的文件列表
- 处理文件
- 然后退出
启动时,此脚本会创建一个文件(比如说 script.lock),并在退出时删除此文件。我有一个每分钟运行此脚本的 crontab 条目。如果锁定文件存在,则脚本退出,假设另一个自身实例正在运行。
上述过程运行良好,但我对这种方法的稳健性不太满意。具体来说,如果由于某种原因脚本过早退出并且未删除锁定文件,则新实例将无法正确执行。
我将不胜感激以下方面的建议:
- 使用锁定文件是一种好方法还是有更好/更健壮的方法来做到这一点?
- 使用 crontab 是个好主意还是我可以更好地用 sleep() 编写一个无限循环?
- 我应该为此使用 GNU 'daemon' 程序还是 Perl Proc::Daemon 模块(或其他等效模块)?