定时任务服务相当于我们平时早起使用的闹钟,可以精确到分。安装完系统会默认启动crond任务调度服务。优化设置中会保留Crond开机自启动。
特殊需求:crond服务搞不定了,一般工作中写脚本守护程序执行。
程序文件:程序代码组成,但是没有在计算机内执行,当前没有执行
进程:所谓进程就是计算机中正在执行的程序,守护进程就是一直运行的程序。
守护进程:守护进程就一直运行的程序
执行定时任务可以为我们执行周期性的工作,实时备份,定时备份等。
运维通常半夜进行备份任务
Windows定时任务
开始===>所有程序===>附件===>系统工具===>选择‘任务计划程序’
http://wenku.baidu.com/view/174cb0cc2cc58bd63186bd2a.html
Windows定时任务 %windir%\system32\taskschd.msc /s
linux系统自身定时任务
我们所说的crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令
crond服务是企业生产工作中常用的重要服务,at和anacron很少使用,可以忽略
几乎每个服务器都会用到crond服务。
上千服务器可以开发分布式定时任务项目方案
crontab -u 指定用户,不选 则为root
-l 列出
-e 编辑
-r 删除crontab文件所有内容(几乎不用)
-i 删除crontab文件内容,删除前会提示确认(几乎不用)
-s selinux相关
-u 指定使用的用户执行任务 crontab -u boy -l
crontab -l =cat /var/spool/cron/root crontab -e =vi /var/spool/cron/root ############################################################################################### [root@long ~]# 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 分 时 日 月 周
/etc/cron.deny(拒绝) 该文件中所列用户不允许使用crontab命令
/etc/cron.allow(准许 允许) 该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny
/var/spool/cron/ 所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名
1. 定时任务的配置文件 定时任务规则
2. 文件名就是用户名(root)
默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,
其crontab配置文件对应的文件名与登录的用户名一致,如:root用户的定时任务配置文件为/var/spool/cron/root
用户定时任务分6段,每段通过空格来分隔,系统的定时任务为/etc/crontab,分为7段,空格来分隔。
* 表示任意时间
- 表示分隔符,表示一个时间范围,区间段,如17-19点,每天的17,18,19的00分执行任务。
, 表示分隔时段的意思。30 17,18,19 * * * /bin/sh /scripts/oldboy.sh 表示每天17,18,19
点的半点时刻执行/scripts/oldboy.sh脚本。也可以和- 结合使用,
/n n代表数字,即“每隔n单位时间”,例如:每10分钟执行一次任务可以写成*/10 * * * * cmd,其中
*/10 * * * * cmd,其中,*/10,*的范围是0-59,因此,也可以写成0-59/10
1)为定时任务规则加必要的注释
2)执行shell脚本任务前加/bin/sh
3)定时任务命令或脚本结尾加>/dev/null 2>&1
&>/dev/null,1>/dev/null 2>/dev/null
4)定时任务命令或程序最好写脚本里执行
5)在指定用户下执行相关的定时任务
6)生产任务程序不要随意打印输出信息
tar zcvf echo 123 >a.log
7)定时任务执行的脚本要规范路径(/server/scripts)
8)配置定时任务规范操作过程
1)增加执行任务频率调试任务
每分钟或者系统时间之后5分钟执行,看看结果 对不对。
某些任务不能用于生产环境没有测试机会
代码、配置变更发布流程:
个人开发环境---办公测试环境--->IDC机房测试环境-->IDC正式环境(分组,灰度发布)
2)调整系统时间调试任务(不能直接用于生产环境),保持5分钟。
3)通过脚本日志输出调试定时任务
4)注意一些任务命令带来的问题
5)注意:环境变量导致的定时任务故障(java)
6)通过crond定时任务服务日志调试定时任务(/var/log/cron)
7)其他稀奇古怪的问题调试的方法
当定时任务结尾不加>/dev/null 2>&1的时候,上述目录就会存在大量的小文件。
/var/spool/postfix/maildrop/
/var/spool/postfix/maildrop小文件太多造成Inode索引使用完解决办法
问题表现和检查:
1.运行df -i 查看inode使用是否满;
2.查看/var/spool/postfix/maildrop是否有非常多的小文件,ls直接卡死等情况;
解决:
1.cd /var/spool/postfix/maildrop/; ls|xargs rm -f;
2.vi /etc/crontab ; 将’MAILTO=root‘ 替换成MAILTO="",然后service crond restart即可。如不行crontab -e 第一行增加MAILTO=""
chkconfig |egrep ‘sshd|network|rsyslog|crond|sysstat‘|awk ‘{print "chkconfig "$1" on"}‘|bash
每隔5分钟同步系统时间
#time sync by oldboy at 2010-2-1
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1
如果出错了?
1.看一下命令在命令行执行是否正确
#dayingmingzi
* * * * * /bin/echo "oldgirl" >> /server/log/oldgirl >/dev/null 2>&1
2.发现问题
[root@oldboy34-niubility ~]# /bin/echo "oldgirl" >> /server/log/oldgirl >/dev/null 2>&1 [root@oldboy34-niubility ~]# cat /server/log/oldgirl [root@oldboy34-niubility ~]# /bin/echo "oldgirl" >> /server/log/oldgirl >/dev/null 2>&1 [root@oldboy34-niubility ~]# /bin/echo "oldgirl" >> /server/log/oldgirl >/dev/null 2>&1 [root@oldboy34-niubility ~]# /bin/echo "oldgirl" >> /server/log/oldgirl >/dev/null 2>&1 [root@oldboy34-niubility ~]# /bin/echo "oldgirl" >> /server/log/oldgirl >/dev/null 2>&1 [root@oldboy34-niubility ~]# /bin/echo "oldgirl" >> /server/log/oldgirl >/dev/null 2>&1 [root@oldboy34-niubility ~]# /bin/echo "oldgirl" >> /server/log/oldgirl >/dev/null 2>&1 [root@oldboy34-niubility ~]# cat /server/log/oldgirl [root@oldboy34-niubility ~]# 3.如果定时任务把结果输出到文件中,就别定向到空 [root@oldboy34-niubility ~]# /bin/echo "oldgirl" >> /server/log/oldgirl [root@oldboy34-niubility ~]# cat /server/log/oldgirl oldgirl
1. 定时任务要加注释
2. 如果已经要定向到文件(把命令或脚本的结果放到文件)中,结尾不要有2>&1
3. /server/log目录必须要存在才能出结果,如没有创建这个目录。
4. 定时任务中的路径一定要绝对路径
5. crond服务必须首先开启
6. 查看定时任务日志tail /var/log/cron
1. 定时任务一定尽量用脚本实现
2. 命令行操作成功,然后放入脚本执行(/bin/sh脚本全路径)成功,最后在配置任务(放到定时任务中)
3. 复制操作成功的命令行脚本,在定时任务里粘贴配置
4. 执行脚本使用/bin/sh来执行,/bin/sh /server/script/oldboy.sh
5. 在定时任务中,要把脚本/命令的执行结果定向到空或者是一个文件中,不要什么都不加
注意:
如果定时任务没有定向到空或者某一个文件中
1. 如果你的邮件服务(postfix sendmail)没有打开,给root用户源源不断发邮件,会提示You have mail in /var/spool/mail/root
2. 如果你的邮件服务(postfix sendmail)没有打开, 会临时放到一个临时目录,最终会导致占用大量的inode
PATH环境变量只有部分与java的环境变量等
crontab执行shell时只能识别为数不多的系统环境变量,一般用户定义的普通变量是无法识别的,
如果在编写的脚本中需要使用这些变量,最好使用export重新声明(export PATH)下该变量,脚本才能正常执行,例如:生产情况和java相关的服务任务和脚本
“%”号在crontab任务配置中被认为是newline,需要用“\”来转义。crontab任务命令中,如果有"date +%Y%m%d", 必须替换为:"date +\%Y\%m\%d", 但写在脚本中就不需要转义了。这也是老师推荐用脚本文件的原因之一,如果是脚本文件,那么"%" 就不需要转义了
原文:http://www.cnblogs.com/Csir/p/6403883.html