首页 > 系统服务 > 详细

Linux定时任务详解

时间:2017-02-16 01:30:33      阅读:372      评论:0      收藏:0      [点我收藏+]

1.1 什么是定时任务

定时任务服务相当于我们平时早起使用的闹钟,可以精确到分。安装完系统会默认启动crond任务调度服务。优化设置中会保留Crond开机自启动。

特殊需求:crond服务搞不定了,一般工作中写脚本守护程序执行。

1.2 程序与进程

程序文件:程序代码组成,但是没有在计算机内执行,当前没有执行

进程:所谓进程就是计算机中正在执行的程序,守护进程就是一直运行的程序。

守护进程:守护进程就一直运行的程序

1.3 为什么要用定时任务

执行定时任务可以为我们执行周期性的工作,实时备份,定时备份等。

运维通常半夜进行备份任务

1.4 不同系统的定时任务与种类

Windows定时任务

开始===>所有程序===>附件===>系统工具===>选择‘任务计划程序’

http://wenku.baidu.com/view/174cb0cc2cc58bd63186bd2a.html

Windows定时任务 %windir%\system32\taskschd.msc /s

linux系统自身定时任务

我们所说的crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令

crond服务是企业生产工作中常用的重要服务,at和anacron很少使用,可以忽略

几乎每个服务器都会用到crond服务。

上千服务器可以开发分布式定时任务项目方案

1.5 5.定时任务使用说明

crontab -u 指定用户,不选 则为root

-l 列出

-e 编辑

-r 删除crontab文件所有内容(几乎不用)

-i 删除crontab文件内容,删除前会提示确认(几乎不用)

-s selinux相关

-u 指定使用的用户执行任务 crontab -u boy -l

1.6 6.相关配置文件

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

分 时 日 月 周

1.7 使用者权限及定时任务文件

/etc/cron.deny(拒绝) 该文件中所列用户不允许使用crontab命令

/etc/cron.allow(准许 允许) 该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny

/var/spool/cron/ 所有用户crontab配置文件默认都存放在此目录,文件名以用户名命名

1. 定时任务的配置文件 定时任务规则

2. 文件名就是用户名(root)

1.8 定时任务指令的使用格式

默认情况下,当用户建立定时任务规则后,该规则记录对应的配置文件会存在于/var/spool/cron中,

其crontab配置文件对应的文件名与登录的用户名一致,如:root用户的定时任务配置文件为/var/spool/cron/root

用户定时任务分6段,每段通过空格来分隔,系统的定时任务为/etc/crontab,分为7段,空格来分隔。

1.9 特殊符号的意义

* 表示任意时间

- 表示分隔符,表示一个时间范围,区间段,如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.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.11 工作中调试定时任务的方法

1)增加执行任务频率调试任务

每分钟或者系统时间之后5分钟执行,看看结果 对不对。

某些任务不能用于生产环境没有测试机会

代码、配置变更发布流程:

个人开发环境---办公测试环境--->IDC机房测试环境-->IDC正式环境(分组,灰度发布)

2)调整系统时间调试任务(不能直接用于生产环境),保持5分钟。

3)通过脚本日志输出调试定时任务

4)注意一些任务命令带来的问题

5)注意:环境变量导致的定时任务故障(java)

6)通过crond定时任务服务日志调试定时任务(/var/log/cron)

7)其他稀奇古怪的问题调试的方法

当定时任务结尾不加>/dev/null 2>&1的时候,上述目录就会存在大量的小文件。

1.12 Centos 6: postfix

/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=""

1.13 linux基础优化之开机自启动服务优化

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.14 如何排错

如果出错了?
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.15 小结

1. 定时任务要加注释

2. 如果已经要定向到文件(把命令或脚本的结果放到文件)中,结尾不要有2>&1

3. /server/log目录必须要存在才能出结果,如没有创建这个目录。

4. 定时任务中的路径一定要绝对路径

5. crond服务必须首先开启

6. 查看定时任务日志tail /var/log/cron

 

1.16 技巧

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

 

1.18 系统环境变量问题

PATH环境变量只有部分与java的环境变量等

crontab执行shell时只能识别为数不多的系统环境变量,一般用户定义的普通变量是无法识别的,

如果在编写的脚本中需要使用这些变量,最好使用export重新声明(export PATH)下该变量,脚本才能正常执行,例如:生产情况和java相关的服务任务和脚本

1.19 时间变量问题用反斜线

“%”号在crontab任务配置中被认为是newline,需要用“\”来转义。crontab任务命令中,如果有"date +%Y%m%d", 必须替换为:"date +\%Y\%m\%d", 但写在脚本中就不需要转义了。这也是老师推荐用脚本文件的原因之一,如果是脚本文件,那么"%" 就不需要转义了

Linux定时任务详解

原文:http://www.cnblogs.com/Csir/p/6403883.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!