在Linux中定时任务是依靠crond程序来执行的,跟ssh,network,rsyslog,sysstat一样都是默认开机后启动的。默认情况下crond是每隔一分钟检查一次是否有需要执行的任务。如果有特殊需要,比如每秒执行一次就要写守护程序了。
查看定时任务的目录
[test@CentOS6 ~]$ ll /etc/| grep cron
-rw-------. 1 root root 541 Aug 24 2016 anacrontab
drwxr-xr-x. 2 root root 4096 Aug 7 01:27 cron.d
drwxr-xr-x. 2 root root 4096 Aug 7 01:28 cron.daily
-rw-------. 1 root root 0 Aug 24 2016 cron.deny
drwxr-xr-x. 2 root root 4096 Aug 7 01:27 cron.hourly
drwxr-xr-x. 2 root root 4096 Aug 7 01:28 cron.monthly
-rw-r--r--. 1 root root 457 Sep 27 2011 crontab
drwxr-xr-x. 2 root root 4096 Sep 27 2011 cron.weekly
查看定时任务
[root@CentOS6 ~]# crontab -l
#time sync by test at 2018-8-9
*/5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
#del file by test at 2018-8-10
00 00 * * 6 /bin/sh /server/scripts/del.sh > dev/null 2>&1
[root@CentOS6 ~]#
其中前面5列分别代表分钟、小时、日、月、周。
定时任务文件:
[root@CentOS6 ~]# ll /etc/cron.deny
-rw-------. 1 root root 0 Aug 24 2016 /etc/cron.deny
[root@CentOS6 ~]# ll /var/spool/cron/
total 4
-rw------- 1 root root 182 Aug 10 19:10 root
通过crontab -e修改的内容实际上是/var/spool/root文件
[root@CentOS6 ~]# cat /var/spool/cron/root
#time sync by test at 2018-8-9
*/5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
#del file by test at 2018-8-10
00 00 * * 6 /bin/sh /server/scripts/del.sh > dev/null 2>&1
一般来说,在定时任务配置文件中,用户的定时任务分为6段、系统的定时任务分为7段
[root@CentOS6 ~]# more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
在时间(也就是前五个字段中)里面,*表示每,-表示范围,,表示分割时段,/n n代表数字,每隔n单位时间的意思
定时任务crontab锁以来的服务
[test@CentOS6 ~]$ chkconfig --list crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
查看服务进程是否已经启动
[test@CentOS6 ~]$ ps -ef | grep cron
root 1160 1 0 09:54 ? 00:00:00 crond
test 1220 1191 0 09:59 pts/0 00:00:00 grep cron
如果没有启动可以重新启动该服务
[test@CentOS6 ~]$ sudo su -
[root@CentOS6 ~]# /etc/init.d/crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
写一个自动记录时间的例子
[root@CentOS6 logs]# crontab -l
#time sync by test at 2018-8-9
*/5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
#del file by test at 2018-8-10
00 00 * * 6 /bin/sh /server/scripts/del.sh > dev/null 2>&1
#write logs to somefile
* * * * * echo `date +\%F\ \%T` >> /root/logs/test.log
也可以吧命令写到脚本里面,定时任务调用脚本执行
[root@CentOS6 logs]# more log.sh
echo "`date +%F\ %T` test" >>/root/logs/test.log
[root@CentOS6 logs]# crontab -l
#time sync by test at 2018-8-9
*/5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
#del file by test at 2018-8-10
00 00 * * 6 /bin/sh /server/scripts/del.sh > dev/null 2>&1
#write logs to somefile
* * * * * echo `date +\%F\ \%T` >> /root/logs/test.log
#test sh log
* * * * * /bin/sh /root/logs/log.sh >/dev/null 2>&1