crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
crontab是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行,如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较高,一个要求你的程序是24X7小时不宕机,一个是要求你的调度程序比较可靠,实际工作中,90%的程序都没有必要花这么多时间和精力去解决上面的两个问题的,只需要写好自己的业务逻辑,通过crond这个工业级程序去调度就行了,crond的可靠性,健壮性,大家应该是毫无疑问的。
在linux下的crontab会自动帮我们每分钟重新读取一次/etc/crontab的例行工作事项,但是某些原因或在其他的unix系统中,由于crontab是读到内存中,所以在您修改完/etc/crontab之后可能并不会马上执行,这时请重新启动crond服务。
重启命令使用 /etc/init.d/crond restart 或者 service crond restart
有两种方式添加计划任务到cron:
1. 直接用vim编辑 /etc/crontab文件
2. 使用crontab -e命令
它们的区别是:
a. 使用范围不同: 修改/etc/crontab这种方法只有root用户能用,这种方法更加方便与直接给其他用户设置计划任务,而且还可以指定执行shell等等。 crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务。然后自动写入/var/spool/cron/usename。
b. crontab -e 会进行语法检查,vi 不会检查语法。
crontab计划任务僵尸进程的问题及解决方法:
crontab 计划内容中定义命令如果有输出信息的话,会调用sendmail把输出信息发到/var/mail文件中,所以如果有大量输出信息,将会造成僵尸进程(defunct);这时候应该在crontab中定义的命令后边加上 "> /dev/null 2>&1"