1.cron是什么?
cron是linux下的一个定时任务工具,可以设置任务定时,它支持分(最小1分钟)、时、天、周、月定时,还有一个很爽的地方使用就是它支持对目录下的可执行任务进行定时,这意味着,你可以在自己设置的目录下放多个执行程序,只要对程序增加可执行权限,cron就能定期的将多个任务在特定的时间执行。
cron的具体使用就不详细介绍了,因为这在网上示例是真的多,随便一搜都能找到,不会使用且手懒的同志发动小手搜搜吧!本篇主要介绍在cron使用的过程中,遇到的一些问题,这些问题其实在认真看过cron的使用后是不会碰到的,但是一碰到还真难找到原因,下面就介绍下 吧!
2.遇到的问题
-
开心的写完一个脚本,如cron_test.sh放到cron的配置的目录下,脚本没有定期执行,如下图放到1min的目录下,但是cron没有定时执行我的脚本,刚开始一直找不到原因,cron都是正常起的,看cron日志,以及syslog日志都能看到cron执行过该目录,但是我的脚本就是没被定时调用,最后网上各种查找资料,最终发现,将程序放到cron指定的目录下时,cron不解释带有后缀的可执行程序,如上面脚本是cron_test.sh,只要脚本名改成cron_test就好了当然你直接在cron配置文件中写执行脚本命令的脚本也是可以的,由于当初我们公司为了统一,不让用那种写法。
-
cron定时执行任务时,可执行程序被启动两次,并且启动时间为同一时刻
这个问题。。。。。emm,是让我花费时间最长的,当时我对cron不太了解,只是知道下任务,设置执行目录,对于cron的一些使用细节还是不熟悉的,最终招来了这个费神问题,这个问题就很尴尬,每次你写的程序,放到执行目录下,都会给你启动两个,这其实对非常驻内存的程序来说是无所谓的,但是遇到问题还是得解决问题,曾一度以为cron偶尔也会出现这种问题,结果证明我是错的,这问题频繁出现。
其实这个问题很考验对cron的使用一些细节,尤其是同一个cron不同人改配置时最容易出现问题,这个问题就是改crontab配置和crontab -e的区别。
- 区别
-
修改/etc/crontab这种方法只有root用户能用,这种方法更加方便与直接直接给其他用户设置计划任务,而且还可以指定执行shell等等
-
crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务。然后编辑的配置自动写入/var/spool/cron/usename
也就是说这是不同的操作方法,是cron的两份配置,我之所以出现这个问题就是因为同一个cron执行目录我在两个配置里面都加了,一个是手动改的配置文件加的执行目录,一个是通过cron -e编辑来加的执行目录,因此cron定时调度时会调度两次,将两份配置里的执行目录下的程序都执行一遍,刚好目录还是同一个目录,用户都是root,刚好两个人给cron下定时任务的方式不一样(我使用的是配置文件)。唉。。。。心累。所以,只保留一个就行,这些其实都可以避免的,一定要细心看工具的使用方法。
就水这么多了!!!
-
在/etc/crontab文件中增加test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.1min )这条命令后,cron没有在一分钟后拉起/etc/cron.1min下的可执行程序
这个问题也是检查了很久,最终原因还是在于test -x /usr/sbin/anacron要是这条命令执行成功则后面的cd / && run-parts --report /etc/cron.1min将不被执行,我的可执行程序都在/etc/cron.1min下,当时由于存在anacron命令并且有可执行权限,命令执行返回状态0为成功,则后面的命令无法执行了
而/usr/sbin/anacron命令也是由cron调用的,具体使用可以参考如下文章: