一、定时任务crond的介绍
crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。一般情况下,我们安装文成系统之后,默认变回启动crond任务调度服务,crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作。如果有,变会根据预先设定的定时任务自动执行该定时任务,就如同生活中的闹钟一样。
[root@iZ94lm56da9Z ~]# chkconfig --list|grep crond <--查询是否开启
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@iZ94lm56da9Z ~]# crontab -l <--查询crond的配置
no crontab for root
因为crond是每分钟级别,如果crond服务搞不定了,一般工作中写脚本守护程序进程:
[root@iZ94lm56da9Z ~]# cat corn
while true
do
echo "wangde .....Rui"
sleep 1
done
#内容意思为每秒echo出"wangde .....Rui"。
补充两个概念:
程序文件:程序代码组成,但是没有在计算机内执行。当前没有执行。
守护程序或者守护进程:进程就是在计算机中正在执行的程序;守护进程就是一直运行的程序。
可以看出定时任务是一个守护进程。
[root@iZ94lm56da9Z ~]# ps -ef |grep crond
root 923 1 0 Aug25 ? 00:00:00 crond
root 27961 27915 0 15:29 pts/0 00:00:00 grep crond
crond和ssh一样是一直在后台运行的守护进程:
[root@iZ94lm56da9Z ~]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
[root@iZ94lm56da9Z ~]# /etc/init.d/crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
二、不同系统的定时任务
windows的定时任务存放位置:所有程序->附件->系统工具->任务计划程序
Linux系统的定时任务调度的工作可以分为以下两种情况:
1.linux系统自身定期执行的任务工作:
系统周期性的自行执行的任务工作,例如轮循备份系统日志、备份系统数据、清理系统缓存等,这些任务无需我们人为干预。如下:
[root@alone ~]# ll /var/log/messages*
-rw------- 1 root root 113765 8月 23 23:49 /var/log/messages
-rw-------. 1 root root 226986 8月 7 02:58 /var/log/messages-20160807
-rw------- 1 root root 25713 8月 14 02:58 /var/log/messages-20160814
-rw------- 1 root root 25649 8月 21 02:58 /var/log/messages-20160821
[root@alone ~]# ll /var/log/secure*
-rw------- 1 root root 43166 8月 23 23:44 /var/log/secure
-rw-------. 1 root root 91198 8月 7 03:16 /var/log/secure-20160807
-rw------- 1 root root 133631 8月 14 03:46 /var/log/secure-20160814
-rw------- 1 root root 134102 8月 21 03:30 /var/log/secure-20160821
#每周一份日志,系统自身执行的定时任务
系统默认执行的日志脚本存放位置:
[root@alone ~]# cd /etc/logrotate.d/
[root@alone logrotate.d]# pwd
/etc/logrotate.d
[root@alone logrotate.d]# ls -lrt
总用量 32
-rw-r--r--. 1 root root 136 8月 23 2010 ppp
-rw-r--r--. 1 root root 329 7月 17 2012 psacct
-rw-r--r--. 1 root root 100 2月 4 2013 wpa_supplicant
-rw-r--r--. 1 root root 100 2月 22 2013 yum
-rw-r--r--. 1 root root 210 8月 15 2013 syslog
-rw-r--r--. 1 root root 71 8月 17 2013 cups
-rw-r--r--. 1 root root 219 11月 23 2013 sssd
-rw-r--r--. 1 root root 103 11月 26 2013 dracut
[root@alone logrotate.d]#
[root@alone logrotate.d]# less syslog
[root@alone logrotate.d]# cat syslog |grep -v '^$'
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
系统自动轮循任务的设置配置路径:
[root@alone logrotate.d]# ll /etc/ |grep cron
-rw-------. 1 root root 541 11月 23 2013 anacrontab
drwxr-xr-x. 2 root root 4096 7月 27 13:14 cron.d
drwxr-xr-x. 2 root root 4096 7月 27 13:17 cron.daily
-rw-------. 1 root root 0 11月 23 2013 cron.deny
drwxr-xr-x. 2 root root 4096 7月 27 13:13 cron.hourly
drwxr-xr-x. 2 root root 4096 7月 27 13:15 cron.monthly
-rw-r--r--. 1 root root 457 9月 27 2011 crontab
drwxr-xr-x. 2 root root 4096 9月 27 2011 cron.weekly
[root@alone logrotate.d]# pwd
/etc/logrotate.d
以下是系统及的定时任务,一般用户自定义的定时任务不会放在这里:
[root@alone logrotate.d]# cat /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
2.用户执行的定时任务:
某个用户或者系统管理员定期要做的任务工作,例如每个5分钟和互联网时间服务器同步(当然这个是最基础的系统优化),每天晚上0点备份站点数据及数据库数据,这些工作一般都是用户自己设定定时任务才行,
例如:服务器时间同步:
[root@iZ94lm56da9Z ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
三、linux系统下定时任务软件的种类
linux系统下基本有以下几种:at(适合只执行一次)、crontab(最常用)、anacron。
at:适合执行一次就借宿的调度任务命令。例如:在今晚需要处理一个任务,仅仅是今天晚上,属于突发性的工作任务。要执行at命令,还需要启动一个名为atd的服务才行。(在工作中不常用,所以默认为关闭状态)
[root@iZ94lm56da9Z ~]# chkconfig --list |grep atd
atd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
anacron:这个命令主要用于非7*24小时开机的服务器准备的,anacron并不能指定具体时间执行任务,而是以天为周期或者在系统每次开机后执行的任务工作。他会检测服务器停机期间应该执行但没有进行的任务工作,并将该任务执行一遍。(工作中一般服务器是持续开机,所以一般不怎么用)
备注:
1.这里的crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令
2.crond服务是工作冲常用的重要服务,at和anacron很少使用,可以忽略,
3.工作中几乎每个服务器都会用到crond服务。
四、crontab命令的格式 (下面进入主题)
crond 守护进程,一直运行着的
crontab 设置命令,-e 编辑;-l 列表。
[root@alone logrotate.d]# crontab -h
crontab:无效选项 -- h
crontab: usage error: unrecognized option
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
-s (selinux context)
crontab -e 相当于 vi /var/spool/cron/root
crontab -l 相当于 cat /var/spool/cron/root
[root@iZ94lm56da9Z ~]# crontab -l
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
[root@iZ94lm56da9Z ~]# cat /var/spool/cron/root
*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
让普通用户执行crontab -u richy -e 或者 切换到richy用户下 再使用crontab
crontab 定时任务命令字段解释
* * * * *
0-59 0-23 1-31 1-12 0-6
* 每 * * * * * /bin/sh/scripts/richy.sh 每分钟执行richy.sh
- 范围 00 17-19 * * * /bin/sh/scripts/richy.sh 每天17点,18点,19点整执行richy.sh
, 分隔 30 17,18,19 * * * /bin/sh/scripts/richy.sh 每天17:30,18:30,19:30执行richy.sh
/n 每单位时间 */10 * * * * /bin/sh/scripts/richy.sh 每10分钟执行richy.sh
30 3-5 17-19 * * /bin/sh/scripts/richy.sh 每月的17,18,19号的3:30,4:30,5:30执行命令richy.sh
五、crontab编辑定时任务依赖的服务
[root@iZ94lm56da9Z ~]# chkconfig --list |grep crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@iZ94lm56da9Z ~]# ps -ef |grep crond |grep -v grep
root 27988 1 0 15:30 ? 00:00:00 crond
六、crondtab的总结
定时任务要加注释;
结尾不要有>/dev/null 2>&1;
如果存在目录,目录必须要存在,因为crontab不会创建新目录;
定时任务中的路径一定要是绝对路径;
crond服务必须开启并运行;