Linux cron输出导致僵尸进程案例及解决

来源:互联网 发布:js获取class名称 编辑:程序博客网 时间:2024/06/08 18:38

公司服务器每天会定时重启tomcat服务,但是某天用top命令查看有定时任务的僵尸进程 ps -ef|grep defunct


登录到主机发现服务器上有2个名称为[sh] <defunct>的进程

 

Ps –ef 带进程号查 发现是僵尸进程是restartTomcat.sh这类进程

杀掉这些僵尸进程

单纯使用kill -9 进程号是无法杀掉,需要kill -9 父进程号,子进程会自动被init进程接管,释放。


查询父进程是cronroot下有cron任务


[root@server mail]# crontab -l
50 23 * * * /bin/bash restartTomcat.sh

造成这些现象的原因是crontab中的程序执行,导致输出大量信息到标准设备上。

crontab 计划内容中定义命令如果有大量输出信息将会造成僵尸进程(defunct)这时候应该在定义的命令后边加上 "> /dev/null 2>&1"

 

解决办法 把cron任务的输出定向到空设备上

即将crontab里面的每行命令后面加上 > /dev/null 2>&1



0 0