同步文章使用Linux系统的Crond服务,通过命令 curl 请求服务器同步更新的url ,将发布时间 小于或等于 当前时间的文章发布到osc博客中去。
发现存同一篇文章多次重复同步的问题,推测是在网络不好的情况下,文章发布会超过一分钟,甚至更多,由于是定时任务是每分钟的执行,这时就可能产生多个crond, 根本原因是crontab使用的curl默认没有设定超时时间,一直等待请求响应,当网络突然好转时,会瞬间出现将多篇文章更新上去的情况。
目前的做法是限制curl的最大执行时间为45秒,理论上只要小于一分钟就可以了,不会同时出现多个crond进程就可以了。
然后对同步的url的action进行了加锁处理,使用的库是 texthtml/php-lock ,简单的文件锁就够用了,保证一篇文章只有一个请求同步的操作。同时对guzzle设置了timeout参数,时间在40秒。