shell 脚本中 sleep 挂起

shell 脚本中 sleep 挂起

我的 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启动一个新进程,该进程将一遍又一遍地执行相同的操作。请记住,cron10:00 启动的第一个进程仍在运行。

这个循环将持续下去,在 6 个小时内,您将触发 13 个相同的进程cron,最重要的是每个进程都在无限循环中运行。

总之,使用时cron您不需要这样的东西,sleep 5除非您的操作需要这样的东西,在后一种情况下,请设置一个有效条件,以便过程不会无限期地运行。

相关内容