在负载非常高的服务器上,我的许多日常 cron 任务都停止工作了。我运行的 postfix 服务器只在本地进行交付,因此我可以使用 查看 cron 任务的输出mutt
。
我查看了cron
日志,看到了以下内容:
Feb 23 22:44:16 server10 cron[2276]: /usr/sbin/sendmail: Resource temporarily unavailable
我看到的是/var/log/mail
这样的:
Feb 23 22:05:15 server10 postfix/sendmail[1113]: warning: fork: Resource temporarily unavailable
和systemctl status cron
表示systemctl status postfix
两个进程都在运行。
所以我添加了这个每分钟运行一次的 cronjob
#!/bin/bash
date
sleep 1
date
date >> ~/cron.log
echo "bye"
文件出现花了将近 5 分钟的时间~/cron.log
。然后我可以看到并不是每分钟都在执行,这解释了为什么我的每日 cron 作业没有被执行。
$ cat cron.log
Tue Feb 23 22:52:02 CET 2021
Tue Feb 23 22:53:02 CET 2021
Tue Feb 23 22:56:02 CET 2021
Tue Feb 23 22:58:02 CET 2021
Tue Feb 23 23:01:02 CET 2021
Tue Feb 23 23:02:02 CET 2021
Tue Feb 23 23:07:02 CET 2021
Tue Feb 23 23:08:02 CET 2021
Tue Feb 23 23:10:03 CET 2021
Tue Feb 23 23:11:02 CET 2021
Tue Feb 23 23:13:02 CET 2021
因此,当我运行tail -f
on时/var/log/messages
,我看到了以下内容:
$ tail -f messages | grep cron
Feb 23 23:17:03 server10 cron[2276]: /usr/sbin/sendmail: Resource temporarily unavailable
Feb 23 23:18:01 server10 cron[2276]: /usr/sbin/sendmail: Resource temporarily unavailable
Feb 23 23:18:01 server10 cron[2276]: /usr/sbin/sendmail: Resource temporarily unavailable
Feb 23 23:18:01 server10 cron[2276]: /usr/sbin/sendmail: Resource temporarily unavailable
Feb 23 23:19:16 server10 cron[2276]: /usr/sbin/sendmail: Resource temporarily unavailable
Feb 23 23:19:16 server10 cron[2276]: /usr/sbin/sendmail: Resource temporarily unavailable
Feb 23 23:20:02 server10 cron[2276]: /usr/sbin/sendmail: Resource temporarily unavailable
所以我在谷歌上搜索了一下,找到了
Cron 作业不再起作用有一个非常类似的问题,但这对我没有帮助。我不知道哪个资源达到了极限。sysctl kernel.pid_max
显示 32768,对于系统来说这似乎有点低x86_64
,所以我将值提高到 4194303,但这也无济于事,资源暂时不可用消息不断出现。
那么我如何确定哪种资源已达到极限?遗憾的是日志文件没有告诉我那么多信息。