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