我注意到今天有些crons没有执行,因为我在日志文件中得到以下错误行:
/bin/sh: fork: Resource temporarily unavailable
我做了一些研究,发现它可能与允许用户运行的进程数有关。
然后我跑了: top -u
确实有大量的sh
和curl
进程,我认为这些进程不应该存在。
大多数进程都是对运行某些数据库维护任务的本地php
文件的简单调用。
所有进程都在我的本地计算机上运行,因此我可以完全访问所有内容。如果我知道如何,我会更改限制,但我无法在Mac OS X Lion上找到与此问题相关的任何信息。
另外,我不确定为什么这些进程在执行后不会消失。
有没有办法在执行后杀死进程?
任何正确方向的暗示都将非常感激! 感谢
答案 0 :(得分:1)
你唯一能做的就是使用lockfiles来保证每个特定的cronjob只运行一个实例。最简单的方法是使用cron-scripts中的lockfiles。 (“合作锁定”):
kill -0 <pid>
(#1)#1:kill -0
是无操作的;它只检查pid的有效性
#2:pid很可能属于我们pid的无关过程。我们可以通过检查ps的输出来完善搜索,并检查pid是否实际上属于我们的cron作业的旧实例。
#3:这不是没有比赛的,但对于每分钟运行一次的cronjob来说,它可能已经足够了。