我需要从 wsdl 获取数据并定期存储在数据库中的 cron 作业。如何在单例中实现它以确保在最近结束之前没有创建新实例?
我使用文件来存储cron作业是否正在运行,但我认为应该存在更好的方法。在java中我们可以将Jar作为守护进程运行,因此它可以控制器是单例并且永远不会被杀死(如果被杀死,将创建一个新实例).如何用 PHP 或 Python 中的 out 文件实现它?
如果您不喜欢 pid 文件锁定,则可以使用信号量,即使这是一种常见做法。另外,我建议使用flock/fcntl而不是pid 锁定文件。我认为这对你来说非常好。
至于 cron 作业中的 bash 锁定文件实践,您可以在此处查看一个良好的现有实践:
#!/bin/sh
lockfile="/tmp/cron_rsync.lock"
if [ -z "$flock" ] ; then
lockopts="-w 0 $lockfile"
exec env flock=1 flock $lockopts $0 "$@"
fi