我一直遇到一个问题,我会看到特定流程的许多实例:
/usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t
我已经阅读了一些内容,似乎进程正在启动以发送 cron 作业的 stdout 输出,但由于某种原因永远不会终止。
每天有一个进程,因此它相信它与每日 cron 作业有关。该进程的开始时间ps aux
(每天 04:01)似乎与每日 cron 作业的启动时间(每天 04:02)一致。其内容/etc/cron.daily
为:
0anacron 0logwatch cups logrotate makewhatis.cron mlocate.cron rpm tmpwatch
其内容/etc/crontab
为:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
到目前为止,当这些进程数量很大时,我已经手动终止了它们;如果不这样做,服务器就会耗尽资源,并且其上运行的服务也会停止。最坏的情况是,我会简单地设置另一个 cron 来终止这些进程,但我宁愿从源头上阻止问题。有谁知道这个问题的原因?谁能提供调试步骤?
答案1
该问题根本不在于 sendmail。使用pstree
,我能够确定还有更多进程也挂起,未终止,并且由 crond 为其父进程。我查看了每个流程,发现其中一个流程正在执行以下操作:
cat /var/log/some_log_file
当我这么做的时候ls /var/log/some_log_file
,我看到了
/var/log/some_log_file|
some_log_file
实际上是一个命名管道!似乎 cron 作业正在尝试从该管道读取数据,但从未终止,因为没有任何内容发送到该管道。
作为修复,我删除了它并将其设为常规文件。