您的位置:首页 > 运维架构 > Linux

linux 定时任务 crond 服务应用指南(项目实例)

2016-10-10 17:13 447 查看
linux定时任务crond服务应用指南

Linux的定时任务crond(crontab)服务

1、crond是什么?crond是linux系统中用来定期执行命令或者指定程序的程序(软件)2、秒级任务 (1)crond需要方式实现 (2)自己写守护进程shell循环 (3)Quartz也可实现妙计任务3、定时任务的作用 服务器:7*24小时开机提供服务是网站的基本特征 有重要数据:提高备份周期和备份数量

Linux的定时任务分类

linux系统中定时任务调度的工作可以分为一下两种(1)系统自身的定期执行的任务 系统周期性自行执行的任务工作。如轮询系统日志、备份系统数据、清理系统缓存等[root@ysolin ~]# ls -l /var/log/messages* 系统的日志-rw-------. 1 root root 201123 6月 28 14:44 /var/log/messages-rw-------. 1 root root 200796 6月 26 03:49 /var/log/messages-20160626系统自动轮询任务的设置配置路径:[root@ysolin ~]# ls -l /etc/ |grep cron-rw-------. 1 root root 541 11月 23 2013 anacrontabdrwxr-xr-x. 2 root root 4096 6月 24 18:13 cron.ddrwxr-xr-x. 2 root root 4096 9月 27 2011 cron.daily-rw-------. 1 root root 0 11月 23 2013 cron.denydrwxr-xr-x. 2 root root 4096 9月 27 2011 cron.hourlydrwxr-xr-x. 2 root root 4096 9月 27 2011 cron.monthly-rw-r--r--. 1 root root 457 9月 27 2011 crontabdrwxr-xr-x. 2 root root 4096 9月 27 2011 cron.weekly(2)用户执行的定时任务 某个用户或系统管理员定期要做的任务工作,用户执行放入任务工作,也就是我们运维管理人员执行的任务工作。 例如:服务器时间同步[root@ysolin ~]# crontab -l #查看定时任务time sync by solin*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&12、Linux系统下定时任务软件种类(1)at适合执行一次就结束的调度任务。依赖服务atd(2)anacron适合于非7*24小时开机的服务准备。anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作,它会检测服务器停机期间应该执行,但没有执行的任务工作,并将该任务执行一遍。(3)crond,crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,若有会根据定义好的规则来执行这个定时任务。注:(1)crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令(2)crond服务是企业生产工作中常用的重要服务,at和anacron很少使用,可以忽略。

定时任务crond使用说明

1、语法指令crontab [-u user] {-l | -e | -r |-i}查看帮助[root@ysolin ~]# crontab --helpcrontab: invalid option -- '-'crontab: usage error: unrecognized optionusage: 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)2、指令说明 通过crontab我们可以在固定的间隔时间执行指定的系统指令或script脚本。时间间隔的单位是分、时、日、月、周及以上的任意组合。3、使用者权限文件 文件 说明 /etc/cron.deny #该文件中所列用户不允许使用crontab命令 /etc/cron.allow #该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny /etc/spool/cron/ #所有用户crontab配置文件默认都存在此目录,文件名以用户名命令 注: crontab -e = vi /var/spool/cron/root crontab -l = cat /var/spool/cron/root4、指令选项说明含义表 -e (edit user's crontab) #编辑crontab文件内容 -l (list user's crontab) #查看crontab文件内容 -r (delete user's crontab) #删除crontab文件内容 -i (prompt before deleting user's crontab) #删除crontab文件内容,删除前会提示。 -u #指定使用的用户执行任务 5、指令的使用格式 (1)crond语法格式中时间段的含义[root@ysolin ~]# cat /etc/crontabSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/ # 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)crontab语法格式中特殊符号含义* # *号,表示任意时间,如每分、每小时、每日、每月、每周 - # 减号,表示分隔符,表示一个范围区间, # 逗号,表示分割时间段的意思。/n # n代表数字,即“每隔n单位时间” (3)crontab依赖服务[root@ysolin ~]# chkconfig --list crondcrond 0:off 1:off 2:on 3:on 4:on 5:on 6:off[root@ysolin ~]# /etc/init.d/crond statuscrond (pid 1430) is running...[root@ysolin ~]# ps -ef |grep crond | grep -v greproot 1430 1 0 Jun28 ? 00:00:00 crond[root@ysolin ~]# /etc/init.d/crond restartStopping crond: [ OK ]Starting crond: [ OK ]

定时任务crond实例说明

范例1:每五分钟同步一次系统时间[root@ysolin ~]# vi /var/spool/cron/root[root@ysolin ~]# echo 'time sync by solin' >>/var/spool/cron/root[root@ysolin ~]# echo '*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1' >>/var/spool/cron/root[root@ysolin ~]# crontab -ltime sync by solin*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1范例2:每个月1、10、20日的凌晨3:30分重启apache30 3 1,10,20 * * /application/apache/bin/apachectl graceful

生产环境crond专业实例

1、规范定时任务两例(练习) (1)每分钟打印一次solil到/var/log/solin.log中[root@ysolin ~]# crontab -e 添加任务 #print my name to log * * * * * echo solil >>/var/log/solin.log [root@ysolin ~]# crontab -l#time sync by solin*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1#print my name to log* * * * * echo solil >>/var/log/solin.log[root@ysolin ~]# cat /var/log/solin.logsolilsolilsolil (2)周期任务使用脚本每周六、日上午九点和下午两点(周期)打印时间(格式:****-**-**)创建脚本[root@ysolin ~]# date +%F2016-06-29[root@ysolin ~]# echo 'date +%F' >scripts/date.sh[root@ysolin ~]# cat scripts/date.shdate +%F[root@ysolin ~]# sh scripts/date.sh2016-06-29设置定时任务[root@ysolin ~]# echo "#print date " >>/var/spool/cron/root[root@ysolin ~]# echo "00 09,14 * * 6,7 /bin/sh /root/scripts/date.sh >/dev/null 2>&1" >>/var/spool/cron/root[root@ysolin ~]# crontab -l |tail -2#print date00 09,14 * * 6,7 /bin/sh /root/scripts/date.sh >/dev/null 2>&1注:确保调用的命令是可执行的;路径需要绝对路径2、书写crond定时任务基本要领(1)为定时任务命令加必要的注释 写定时任务规则时尽可能的加上注释(最好是英文英文注释),方便后期更高改,其他运维人员理解定时任务的内容(2)执行脚本任务前加/bin/sh 执行定时任务时,如果是执行脚本,请尽量在脚本后面带上/bin.sh命令,防止脚本没有执行权限而出错(3)定时任务命令或脚本结尾加>/dev/null 2>&1 2>&1表示让标准错误和标准输出一样,即把脚本正常和错误输出都都重定向到/dev/null,不记录任何输出。 >/dev/null 2>&1等价于1>/dev/null 2>/dev/null 等价于 &>dev/null 如果定时任务规则结尾不加>/dev/null 2>&1,很容易导致inode磁盘空间被占满,从而系统服务不正常。(4)定时任务或层序最好在脚本里执行(5)在指令用户下执行相关定时任务 需要root权限执行的任务可以登录到root用户然后设置,如果不需要root权限,可以登录到普通用户(也可以直接在root下c’ron’tab -u solin -e的方式直接设置)设置。不同用户环境问题:如果调用了环境变量/etc/profile (如生产环境中java程序的定时任务),最好在程序脚本中,将用的到环境变量重新export下(6)生产任务程序不要随意打印输出信息 在开发定时任务程序或脚本时,在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果确实需要输出日志,可定向指定日志文件,避免产生系统垃圾。(7)定时任务执行的脚本要规范路径/server/scripts(8)配置定时任务规范操作过程,防止出错。 首先要在命令行操作成功,然后复制成功的命令到脚本里,减少配置定时任务错误; 然后测试脚本,测试成功后,复制脚本的规范路径到定时任务里; 现在测试环境下测试,然后正式环境规范部署。 3、系统定时任务配置轮询日志[root@ysolin ~]# ll /var/log/messages* #系统报错日志-rw-------. 1 root root 201538 6月 29 19:48 /var/log/messages-rw-------. 1 root root 200796 6月 26 03:49 /var/log/messages-20160626[root@ysolin ~]# ll /var/log/secure* #安全信息和系统登录与网络连接的信息-rw-------. 1 root root 8562 6月 29 23:43 /var/log/secure-rw-------. 1 root root 6490 6月 26 01:45 /var/log/secure-20160626[root@ysolin ~]# ls /etc/cron.daily/logrotate[root@ysolin ~]# cat /etc/cron.daily/logrotate # logrotate 程序是一个日志文件管理工具#!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1EXITVALUE=$?if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"fiexit 0[root@ysolin ~]# cat /etc/logrotate.conf # logrotate 的配置文件# see "man logrotate" for details# rotate log files weeklyweekly # keep 4 weeks worth of backlogsrotate 4 # create new (empty) log files after rotating old onescreate # use date as a suffix of the rotated filedateext # uncomment this if you want your log files compressed#compress # RPM packages drop log rotation information into this directoryinclude /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here/var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1} /var/log/btmp { missingok monthly create 0600 root utmp rotate 1} # system-specific logs may be also be configured here. 4、企业生产环境如何调试crond定时任务(个人建议) (1)增加执行频率调试任务 在调试时,把任务执行周期缩短,测试出定时任务效果 规范的操作流程(开发和运维人员): 个人的开发配置环境è办公室的测试环境èIDC机房的测试环境èIDC机房的正式环境 (2)调整系统时间调试任务(不能用于生产环境) 把系统的时间调整为定时任务执行的前五分钟,确保定时任务能够正确执行。 (3)通过日志输出调试定时任务 在脚本中加入日志输出,然后把输出打到指定的日志中,然后观察日志内容结果,看是否执行或正确执行。 (4)注意一些任务命令带来的问题 如:*/1 * * * * * echo “Hello Word” >> /tmp/solin.log >/dev/null 2>&1 因前面已经有了重定向,后面要去掉/dev/null 2>&1 (5)注意环境变量导致的定时任务故障 在调试java程序的时候,注意环境变量,把环境变量的定义加到脚本里 (6)通过crond定时任务服务日志调试定时任务[root@ysolin ~]# tail -f /var/log/cronJun 30 02:00:01 ysolin CROND[3537]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)Jun 30 02:01:01 ysolin CROND[3541]: (root) CMD (run-parts /etc/cron.hourly)Jun 30 02:01:01 ysolin run-parts(/etc/cron.hourly)[3541]: starting 0anacronJun 30 02:01:01 ysolin anacron[3550]: Anacron started on 2016-06-30Jun 30 02:01:01 ysolin anacron[3550]: Jobs will be executed sequentiallyJun 30 02:01:01 ysolin anacron[3550]: Normal exit (0 jobs run)Jun 30 02:01:01 ysolin run-parts(/etc/cron.hourly)[3552]: finished 0anacronJun 30 02:05:01 ysolin CROND[3555]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)Jun 30 02:10:01 ysolin CROND[3559]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)Jun 30 02:15:01 ysolin CROND[3563]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

crond定时任务生产应用问题10箴言

1、系统环境变量问题2、定时任务绝对路径3、脚本权限问题加/bin/sh4、时间变量问题用反斜线5、>/dev/null 2>&1,防止磁盘空间(inode)被占满6、定时任务规则之前加注释7、使用脚本程序代替命令行定时任务8、避免不必要的程序及命令输出9、切到目标目录的上一级打包目标10、定时任务脚本中的程序命令用全路径

crond生产环境案例及解决过程

1、No space left on davice生产环境故障问题描述: 工作中设置crontab定时任务时任务规则保存时,提示“No space left on davice”,此时df -h检查磁盘,发现磁盘有空余空间,用df -i检查则发现/var目录已占用100%的inode数量。最后检查发现/var/spool/clientmqueue/下有大量的文件,执行cd /var/spool/clientmqueue ;rm -f * 自动跳出,无法删除故障分析: 当系统中crond定时任务执行的程序有输出内容时,输出的内容会以邮件的形式放送给crond的用户(默认是root),而sendmail等服务没有开启的时,这些邮件内容就会在邮件队列临时目录中产生文件,导致消耗inode数量,一旦indode数量耗尽就会导致系统无法写入文件而报错:No space left on davice解决方式:(1)删除目录或文件[root@ysolin ~]# cd /var/spool/clientmqueue && ls |xargs rm -f或者[root@ysolin ~]# cd /var/spool && rm -rf clientmqueue[root@ysolin ~]# mkdir clientmqueue && chmod 770 clientmqueue && chown smmsp.smmsp -R /var/spool/clientmqueue(2)修改定时任务,添加 >/dev/null 2>&1 2、No space left on davice生产环境故障理论:inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。常见问题:No space left on device解决思路(1)查看分区使用情况:[root@ysolin ~]# df -lk查看分区使用情况(2)查看inode使用信息:[root@ysolin ~]# df -i#查看inode使用信息解决方式:(1)find锁定占用空间最大的目录(通常目录大小越大,表示目录下的文件越多)(2)删除多余的inode节点。(find /xxx -type f -exec rm {} \;)如:查看系统空间使用最多的文件find / -type f -size -1k | xargs -i dirname {} | sort -nr| uniq -c | sort -nr | tail删除:(一定要确定是自己的站点,而且所删除的东西已经不重要)find /路径/路径 -size -1k -type f | xargs rm -f
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息