我的 Ubuntu PC ( 12.04.3 ) 上运行着一个 cron 脚本,它会定期检查磁盘空间。此脚本中还使用了“sleep 5”。此系统运行了一个月,但遇到了一个问题。有多个 cron 脚本实例在运行(大约数千个),还有多个“sleep”实例。
当我杀死其中一个睡眠进程时,与其相关的 cron 脚本也完成了。
睡眠是否经常挂起?是否需要重新启动机器以避免这种情况?还有其他方法可以避免这种情况。
答案1
我觉得你制造了一个循环。
例如,考虑以下(糟糕的)脚本,我们称之为check.sh
:
while :; du -sh /home/user >> /some/file 2>/dev/null; sleep 5; done
现在创建一个cron
条目,以便check.sh
每 30 分钟运行一次:
*\30 * * * * bash /path/to/check.sh
假设脚本在 10:00 首次运行,将检查磁盘空间并将其保存在文件中。棘手的部分是sleep 5
,如果您没有设置关闭它的有效条件,它将暂停脚本 5 秒钟,然后从顶部继续执行,这意味着相同的检查和写入操作。这个循环将不断进行。
30 分钟后,再次cron
启动一个新进程,该进程将一遍又一遍地执行相同的操作。请记住,cron
10:00 启动的第一个进程仍在运行。
这个循环将持续下去,在 6 个小时内,您将触发 13 个相同的进程cron
,最重要的是每个进程都在无限循环中运行。
总之,使用时cron
您不需要这样的东西,sleep 5
除非您的操作需要这样的东西,在后一种情况下,请设置一个有效条件,以便过程不会无限期地运行。