17 linux系统定时任务crond入门

linux定时任务服务crond(crontab)服务
crond是linux系统中用来定期执行命令或者指定程序任务的一种服务或软件,像闹钟。
一般在安装c5/c6系统时第一个就是crond。
crond服务默认情况(每分钟)会检查系统中是否有需要执行的定时任务,如果有就会根据事先定义好的规则来执行这个定时任务。
秒级任务:
(1)crond一般情况下无能为力但可以通过该方法实现;http://blog.csdn.net/shootyou/article/details/6918538
(2)自己写守护进程shell循环;
(3)Quartz也可以实现秒级任务。
[root@centos scripts]# cat miao.sh //while循环,守护进程
#!/bin/sh
while true
do
echo oldboylinux >>/tmp/miao.log
sleep 1
done
[root@centos scripts]# sh miao.sh &
[1] 19562
[root@centos scripts]# ps -ef|grep miao
root 19562 16707 0 16:27 pts/0 00:00:00 sh miao.sh
root 19574 16707 0 16:27 pts/0 00:00:00 grep miao
[root@centos scripts]# tail -f /tmp/miao.log
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
oldboylinux
^C
[root@centos scripts]# kill 19562
[1]+ 已终止 sh miao.sh
[root@centos scripts]# ps -ef|grep miao
root 19687 16707 0 16:29 pts/0 00:00:00 grep miao

[root@centos scripts]# LANG=EN
[root@centos scripts]# chkconfig --list|grep 3:on
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
。。。。。。
为何需要定时任务:
服务器:7*24小时开机提供服务是网站的基本特征。
有重要数据:1天备份一次,5份以上。
服务器上的数据一般最低1天备份一次,每分钟(实时备份)再增量备份。
半夜1点备份;假设一次备份需要5小时且消耗资源大(CPU、内存),定时任务随之产生,可以帮我们实现自动备份数据。

  

1.系统管理的定时任务
[root@crmn ~]# ls /etc/ |grep cron
anacrontab
cron.d
cron.daily
cron.deny
cron.hourly
cron.monthly
crontab
cron.weekly
解答为何messages、secure按周轮询的,系统定时任务配合syslog共同完成,属于系统管理的
[root@crmn ~]# ll /var/log/messages
-rw-------. 1 root root 144 Nov 29 21:06 /var/log/messages
[root@crmn ~]# ll /var/log/messages*
-rw-------. 1 root root 144 Nov 29 21:06 /var/log/messages
-rw-------. 1 root root 195827 Nov 25 08:15 /var/log/messages-20171129
[root@crmn ~]# ll /var/log/secure*
-rw-------. 1 root root 3673 Nov 29 21:53 /var/log/secure
-rw-------. 1 root root 18189 Nov 25 12:36 /var/log/secure-20171129
[root@crmn ~]# cd /etc/cron
cron.d/ cron.daily/ cron.deny cron.hourly/ cron.monthly/ crontab cron.weekly/
[root@crmn ~]# cat /etc/cron.daily/logrotate //
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
[root@crmn ~]# less /etc/logrotate.conf //
[root@crmn ~]# ls /etc/logrotate.d
dracut ppp psacct syslog yum
[root@crmn ~]# cat /etc/logrotate.d/syslog
/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
}
2.用户管理的定时任务
[root@crmn ~]# crontab -l //查看定时任务
#time sync by oldboy at 2017-11-29
*/5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1

linux定时任务分类:
(1)at适合执行一次就结束的调度,突发性的任务,每天晚上。了解即可。
[root@crmn ~]# chkconfig --list atd //at依赖的服务是atd
atd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
(2)anacron适合于非7*24小时开机的服务器准备的,开机执行的。
检测停机期间没有执行的任务,在开机后一次性执行一遍。
(3)crond,crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,如果有就会根据事先定义好的规则来执行这个定时任务。
[root@crmn ~]# chkconfig --list crond //crond依赖的服务是crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
提示:crond是一个定时的任务守护进程,而crontab是用户用来设置定时任务规则的命令。

[root@crmn ~]# man crontab
[root@crmn ~]# crontab -l //查看定时任务
#time sync by oldboy at 2017-11-29
*/5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
[root@crmn ~]# crontab -r //删除定时任务
[root@crmn ~]# crontab -l
no crontab for root
[root@crmn ~]# ^C

[root@crmn ~]# crontab -e //编辑定时任务
no crontab for root - using an empty one
###20171202###

"/tmp/crontab.UbsVS4" 1L, 15C written
crontab: installing new crontab
[root@crmn ~]# head -5 /var/spool/cron/root // ==》crontab -e
###20171202###

//使用者权限及定时任务文件
[root@crmn ~]# cat /etc/cron.deny
[root@crmn ~]# cat /etc/cron.allow //优先于/etc/cron.deny

默认情况下当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,其crontab配置文件对应的文件名与登录名一致,如:root用户的定时任务配置文件为/var/spool/cron/root
crontab定时任务书写格式:
用户定时任务为:/etc/crontab,分为6段(系统定时任务为8段),空格分隔;前5段为时间设定段,第六段为所要执行的命令或者脚本任务段。
[root@crmn ~]# 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
//分时日月周
* 意思是“每”、任意时间都;eg:00 23 * * * cmd 表示每月每周每日的23:00都执行cmd任务。
- 表示分隔符、一个时间范围、区间段;eg:00 17-19 * * * cmd 表示17,18,19点整分别执行的意思。
,表示分隔时段的意思;eg:30 17,18,19 * * * /bin/sh /scripts/oldboy.sh 表示17,18,19点整分别执行的意思。
/n 即“每隔n单位时间”;eg:*/10 * * * * cmd 表示每10分钟执行一次任务。*/10等价于0-59/10

  

//crontab 编辑的定时任务依赖的服务
[root@crmn ~]# chkconfig --list crond //查看开机自启动,对外不需要提供服务故无端口号,是自身的守护进程。
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@crmn ~]# /etc/init.d/crond status
crond (pid 1450) is running...
[root@crmn ~]# /etc/init.d/crond restart
Stopping crond: [ OK ]
Starting crond: [ OK ]
//注意:crontab -e和visudo会检查语法

//生产环境crontab专业示例:
eg:每分钟打印自己的名字拼音到“/service/log/名字拼音文件”中:
[root@crmn ~]# mkdir /server/log/ -p
[root@crmn ~]# crontab -e
##print a name
* * * * * echo meng >> /server/log/meng.log
[root@crmn ~]# ls /server/log/meng.log //自动生成文件
/server/log/meng.log
[root@crmn ~]# tail -f /server/log/meng.log
meng
meng

eg:每周六、日 上午9:00和下午14:00 来学习(/server/scripts/meng.sh)
要求:脚本功能是打印当天的日期:2017-12-02可以随意追加到一个文件里或者干脆输出到屏幕。
[root@crmn ~]# mkdir -p /server/scripts/
[root@crmn ~]# echo 'date +%F' >/server/scripts/meng.sh
[root@crmn ~]# sh /server/scripts/meng.sh
2017-11-30
[root@crmn ~]# echo "#study#" >>/var/spool/cron/root //(1).输入;加注释。
[root@crmn ~]# echo "00 09,14 * * 6,7 /bin/sh /server/scripts/meng.sh" >>/var/spool/cron/root
[root@crmn ~]# crontab -l|tail -2
#study#
00 09,14 * * 6,7 /bin/sh /server/scripts/meng.sh

//(2).[root@crmn ~]# crontab -e输入:
"#study#"
00 09,14 * * 6,7 /bin/sh /server/scripts/meng.sh >/dev/null 2>&1
//定时任务规则结尾加>/dev/null 2>&1;其等价于1>/dev/null 2>/dev/null。将标准错误和标准输出都定位到/dev/null,以免产生垃圾!
//2>&1 就是把标准错误重定向到标准输出(>&)

posted @ 2017-12-01 17:14  bkycrmn  阅读(150)  评论(0)    收藏  举报