一、定时任务crond的介绍
crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。一般情况下,我们安装文成系统之后,默认变回启动crond任务调度服务,crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作。如果有,变会根据预先设定的定时任务自动执行该定时任务,就如同生活中的闹钟一样。
[[email protected] ~]# chkconfig --list|grep crond <--查询是否开启 crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off [[email protected] ~]# crontab -l <--查询crond的配置 no crontab for root
因为crond是每分钟级别,如果crond服务搞不定了,一般工作中写脚本守护程序进程:
[[email protected] ~]# cat corn while true do echo "wangde .....Rui" sleep 1 done #内容意思为每秒echo出"wangde .....Rui"。
补充两个概念:
程序文件:程序代码组成,但是没有在计算机内执行。当前没有执行。
守护程序或者守护进程:进程就是在计算机中正在执行的程序;守护进程就是一直运行的程序。
可以看出定时任务是一个守护进程。
[[email protected] ~]# 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一样是一直在后台运行的守护进程:
[[email protected] ~]# /etc/init.d/sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ] [[email protected] ~]# /etc/init.d/crond restart Stopping crond: [ OK ] Starting crond: [ OK ]
二、不同系统的定时任务
windows的定时任务存放位置:所有程序->附件->系统工具->任务计划程序
Linux系统的定时任务调度的工作可以分为以下两种情况:
1.linux系统自身定期执行的任务工作:系统周期性的自行执行的任务工作,例如轮循备份系统日志、备份系统数据、清理系统缓存等,这些任务无需我们人为干预。如下:
[[email protected] ~]# 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 [[email protected] ~]# 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 #每周一份日志,系统自身执行的定时任务
系统默认执行的日志脚本存放位置:
[[email protected] ~]# cd /etc/logrotate.d/ [[email protected] logrotate.d]# pwd /etc/logrotate.d [[email protected] 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 [[email protected] logrotate.d]# [[email protected] logrotate.d]# less syslog [[email protected] 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 }
系统自动轮循任务的设置配置路径:
[[email protected] 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 [[email protected] logrotate.d]# pwd /etc/logrotate.d
以下是系统及的定时任务,一般用户自定义的定时任务不会放在这里:
[[email protected] 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点备份站点数据及数据库数据,这些工作一般都是用户自己设定定时任务才行,
例如:服务器时间同步:
[[email protected] ~]# crontab -l */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
三、linux系统下定时任务软件的种类
linux系统下基本有以下几种:at(适合只执行一次)、crontab(最常用)、anacron。
at:适合执行一次就借宿的调度任务命令。例如:在今晚需要处理一个任务,仅仅是今天晚上,属于突发性的工作任务。要执行at命令,还需要启动一个名为atd的服务才行。(在工作中不常用,所以默认为关闭状态)
[[email protected] ~]# 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 列表。
[[email protected] 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
[[email protected] ~]# crontab -l */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 [[email protected] ~]# 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编辑定时任务依赖的服务
[[email protected] ~]# chkconfig --list |grep crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off [[email protected] ~]# ps -ef |grep crond |grep -v grep root 27988 1 0 15:30 ? 00:00:00 crond
六、crondtab的总结
- 定时任务要加注释;
- 结尾不要有>/dev/null 2>&1;
- 如果存在目录,目录必须要存在,因为crontab不会创建新目录;
- 定时任务中的路径一定要是绝对路径;
- crond服务必须开启并运行;
.
.
.
.
以上是在学习老男孩linux教学后的个人总结