`
e-ant
  • 浏览: 72058 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用crond 在linux中定时执行任务

阅读更多
<转>使用crond 在linux中定时执行任务2009-03-27 10:35使用crond 在linux中定时执行任务
定期运行程序或者脚本是管理员要面临一个很普遍的问题


一、 使用crond监控程序运行程序

1. 使用cron来定期执行任务
使用crond (cron监控程序)来定期运行一些任务,比如备份日志、数据库、把日志发送到自己邮箱等等操作都可以又定期运行程序来完成。
crond是个脚本,每次Linux启动的时候都自动起到该脚本,该脚本是 /etc/rc.d/init.d 下面的,每次系统启动的时候就自动会启动该目录下

的脚本。
cron有两个配置文件,一个/etc/crontab,是一个全局配置文件,一组是crontab命令生成生成的配置文件,是属于用户级的。

一般对管理员来说,只要使用全局配置的/etc/crontab就配置文件就可以了,我们去打开配置文件看看:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

我们稍微来分析一下这个文件:

/* 设置基于什么shell来运行,我们这里是基于bash shell */
SHELL=/bin/bash

/* 指定目录中有次文件的命令时,不需要完整目录路经 */
PATH=/sbin:/bin:/usr/sbin:/usr/bin

/* 使用cron实际工作时,见通过邮件来通知root用户 */
MAILTO=root

/* 与/etc/crontab配置文件相关的主目录为根目录 */
HOME=/

/* 好了,这里是关键是,下面的是要指定什么时间运行什么目录下的任务,run-parts命令是运行指定目录下的每个脚本 */
# run-parts

/* 这一句是在每天每小时过后一分钟运行/etc/cron.hourly目录中的每个脚本文件 */
01 * * * * root run-parts /etc/cron.hourly

/* 在每天凌晨4点2分运行/etc/cron.daily目录中的每个脚本文件 */
02 4 * * * root run-parts /etc/cron.daily

/* 在每个星期天凌晨4点22分运行/etc/cron.weekly目录中的每个脚本文件 */
22 4 * * 0 root run-parts /etc/cron.weekly

/* 在每个月的第一天凌晨4点42分运行/etc/cron.monthly目录中的每个脚本文件 */
42 4 1 * * root run-parts /etc/cron.monthly

大家看到里面的"*"一定觉得很奇怪,下面我们句稍微来了解一下cron的语法:
上面脚本中的时间是从左到右的,分别列出了五个字段,我们看下面的表:

------------------------------------------------
字段            取值范围
------------------------------------------------
Minute          0 ~ 59
Hour            0 ~ 23,其中0是午夜,20是晚上8点
Day             1 ~ 31
Month           1 ~ 12
Day of week     0 ~ 7,其中0和7是表示星期天
------------------------------------------------

任何字段中的星号是通配符,例如,如果第一个字段包括星号,则特定若无其事在可能的每一分钟运行。如果要指定时间范围,比如上午8点到

下午4点,则可以见第二个字段设置为8~16。如果要隔一天运行任务,则可以将第三个字段设置为*/2。可以看出,如果五个字段(minute、hour

、day、month、day of week) 之后,cron中的每个字段就没什么神秘之处了。


2. 用户自己的cron
用户也可以计划用户自己的cron任务,比如他想要在半夜整理他的文件,然后发送邮件给自己,只要这个用户他没有在/etc/cron.deny表中,就可以使用crontab -e命令来启动自己的cron文件。

3. 对cron的访问控制
默认情况下,所有用户都能访问cron工具,要对cron进行访问控制,则可以生成/etc/cron.allow与/etc/cron.deny文件。
(1)这两个文件都不存在时,每个用户都可以访问cron工具]
(2)存在/etc/cron.allow文件时,则只有cron.allow文件中允许的用户才能访问cron工具,如果也有/etc/cron.deny文件,则忽略cron.deny文件

二、 使用at命令定期运行程序

1. 使用cron运行任务
cron任务的缺点是计划要经常运行,假如我们只是想要让特定任务运行一次呢?那么,这时候就要用到at监控程序了。
设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。at类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它
。at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序。at now + time命令可以在指示任务。

假设处理一个大型数据库,要在别人不用系统时去处理数据,比如凌晨2点5分。那么我们就应该先建立/home/mj/airplane脚本管理数据库,计

划处理/home/mj/air-safe文件中的结果。正常方式是这样启动下列命令:

# at 2:05 tomorrow
at> /home/mj/airplane > /home/mj/air-safe
at> Ctrl+D

AT Time中的时间表示方法
-----------------------------------------------------------------------
时间         例子                      说明
-----------------------------------------------------------------------
Minute       at now + 5 minutes        任务在5分钟后运行
Hour         at now + 1 hour           任务在1小时后运行
Days         at now + 3 days           任务在3天后运行
Weeks        at now + 2 weeks          任务在两周后运行
Fixed        at midnight               任务在午夜运行
Fixed        at 10:30pm                任务在晚上10点30分开始
Fixed        at 1:00 12/20/04          任务在2004年12月20日凌晨1点开始
-----------------------------------------------------------------------

2. 查看目前在等待执行的任务
输入任务后,可以使用atq命令可以看到目前等待执行的任务,输出提供了任务号、用户和任务执行时间等信息。

# atq
8    2004-12-15 02:05 a mj

里面的a表示是at任务还是batch命令生成的任务。

3. 删除at任务
删除一个at任务比较简单,使用atrm命令就可以轻松解决。
比如我知道了任务的队列号,那么就可以删除它:

# atrm 8

就删除了队列号为8的at任务了。


三、batch命令处理批处理任务

这个具体就不说了,该命令类似 at -q b

Crontab命令使用的文件具体位置: /Var/Spool/Cron/Crontabs 目录下,每个用户都有其对应的名字,比如,root用户的文件为root.

直接登陆窗口界面
# crontab -l root file://查看作业
/etc/init.d/cron stop file://停止进程
在CONSOLE 中熟命令 crontab -e root
crontab -e root file://编辑加入要执行的代码
0-59 * * * * date >> /export/home/keven/keven.txt file://加入次行在末尾,每分钟执行一次

"格式如下:
(1)  (2)  (3)  (4)  (5)  (6)
0   0   *   *   3   date >> /export/home/keven/keven.txt
1. 分钟 (0-60)
2. 小时 (0-23)
3. 日 (1-31)
4. 月 (1-12)
5. 星期 (0-6)
6. 所要运行的程序
如1-59分钟,1-24 小时

0 18-23 0 0 0-6 file://每天的18-23点执行,0-6为周日到周六

/etc/init.d/crond(Linux为crond sunos为cron) start file://启动进程
# crontab -l root
查看作业是否加入执行队列。
不行退出到登陆界面,再次登陆进入,还加载就reboot


你是不是直接编辑用户的cron文件呀?
如果是当然不运行,cron demon是在启动的时候才读一次配置文件.
如果你是后加的JOB 要用crontab -e来编辑用户的cron.
要不你 kill -HUP cron的进程ID.
重新启动这个进程.
每5分钟做一次必须写成5,15,20,25,30,35,40,45,50,55 * * * *
===================================
"格式如下:
(1)  (2)  (3)  (4)  (5)  (6)
0   0   *   *   3   /usr/bin/updatedb
1. 分钟 (0-60)
2. 小时 (0-23)
3. 日 (1-31)
4. 月 (1-12)
5. 星期 (1-7)
6. 所要运行的程序
但是我设成 1 0 0 0 0 /usr/bin/ps
希望能自动在一分钟之后显示进程。但是没有成功。
HELP ME

===============================================
15 1 * * * /opt/bin/ta.sh /opt/aadir > /dev/null

此处>/dev/null 必须用吗? 何意思?
输出重定向到/dev/null, 否则会mail到你的邮箱
dev/null 是一个特殊文件,所有输入到该文件的数据都会被丢弃。
> /dev/null 的意思就是丢弃所有的输出内容,否则就会将输出内容发送到执行该命令的用户信箱中。
这种写法只能把标准输出送到/dev/null中,如果有错误产生的话,还是会送到信箱里的。下面的写法才可以丢弃所有的输出内容:
15 1 * * * /opt/bin/ta.sh /opt/aadir > /dev/null 2>&1


定时执行crontab使用方法祥解

在linux,有多种方式可以实现定时运行,使用最灵活的应该是crontab, 在使用crontab必须特别注意环境变量问题,在此以执行oracle的sqlplus为例, 说明crontab的使用方法。
1:crontab 使用方法: crontab [ -e | -l | -r ] 文件名 -e:编辑任务 -l:显示任务信息 -r:删除定时执行任务信息

2:crontab中处理的文件格式为 分钟 小时 日期 月 星期 执行的文件名 *代表所有条件 5 * * * * rem /home/oracle/execsql 代表每个小时的5分钟时执行/home/oracle/execsql文件

3:对于sql等需要在特定的环境变量下运行的命令,在执行文件中必须列出。 如在oracle下执行sqlplus,必须按以下格式编写:

$ cat execsql ORACLE_HOME=/opt/ora817;

export ORACLE_HOME ORACLE_OWNER=oracle;

export ORACLE_OWNER ORACLE_SID=ora815; export ORACLE_SID

ORACLE_BASE=/opt/ora817/app/oralce;export ORACLE_BASE     LD_LIBRARY_PATH=$ORACLE_HOME/lib;export LD_LIBRARY_PATH PATH=$PATH:$ORACLE_HOME/bin:$LD_LIBRARY_PATH;export PATH NLS_LANG=AMERICAN_AMERICA.ZHS16CGB231280;export NLS_LANG

/ora815/bin/sqlplus test1/test1 @test1.ext (执行@test1.ext文件,数据库的用户名/密码为test1/test1)

其中要求execsql为可执行的程序 $ ls -al execsql -rwxr-xr-x 1 oracle dba 374 Oct 07 15:17 execsql


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

分享到:
评论

相关推荐

    使用crond 在linux中定时执行任务.docx

    。。。

    使用crond 在linux中定时执行任务.pdf

    。。。

    Linux中使用crond工具创建定时任务的方法

    crond是一个linux下的定时执行工具(相当于windows下的scheduled task),可以在无需人工干预的情况下定时地运行任务。crond工具提供crontab命令来设置定时任务,属于守护进程,只能精确到分钟,可以设定周期性执行...

    linux中定时任务crond命令使用方法

    crond是linux用来定期执行命令或指定程序任务的一种服务。安装完操作系统后,默认会启动crond任务调度服务。crond服务会定期检查系统中是否有要执行的任务。如果有要执行的任务便会自动执行该任务。crond定时任务...

    Linux之定时任务Crond详解

    Crond服务会定期(默认每分钟检查一次)检查系统中是否有要执行的任务工作,如果有,便会根据其预先设定的定时任务规则自动执行该定时任务工作,这个crond定时任务服务就相当于我们平时早起使用的闹钟一样。...

    crontab执行时间与系统时间不一致问题解决

    cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。  service crond start //启动服务  service crond stop //关闭服务  service crond restart //重启服务  service crond reload //...

    crontab定时任务不执行的一些原因总结

    最近在工作中遇到了一些问题,crontab定时任务居然不执行,后来我在网上找的时候发现网上主要说了这5个原因: 1 crond服务未启动 crontab不是Linux内核的功能,而是依赖一个crond服务,这个服务可以启动当然也可以...

    Linux 服务器中提高CPU使用率脚本

    3、将定时任务策略输入至定时任务进程中, 每天18点启动一次,执行/etc/press/press_v3.1.sh文件,"-c=31":设置cpu使用率为31-36之间,“-t=86400”:执行86400秒=24小时 echo '30 15 * * * /bin/bash /etc/press/...

    linux中普通用户的定时任务详解

    如何判断定时任务有没有执行?首先crond服务要处于运行状态 [oracle@node2 ~]$ service crond status Redirecting to /bin/systemctl status crond.service ● crond.service - Command Scheduler Loaded: loaded ...

    Linux下浅谈crond与crontab的命令用法

    Crond服务会定期(默认一分钟检查一次)检查系统中是否有要执行的任务工作。如果有,便根据其预先设定的定时任务规则自动执行该定时任务工作。这个Crond定时服务就像我们的闹钟一样。 crontab是用于设置周期性被...

    crontab定时任务不执行的原因分析与解决方法

    主要给大家介绍了关于crontab定时任务不执行的原因分析与解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    crontab命令 定时执行任务

    该命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要...

    Linux运维-定时任务与延时任务

    为什么要用定时与延时任务?...1.crond 定时任务服务 2.crond的设定方式 ①命令设定方式: 用户级别定时任务 crontab -u root -e ##设定 crontab -u root -l ##查看 crontab -u root -r ##删除 /var/spool/

    利用Linux中的crontab实现分布式项目定时任务功能

    认识crond服务  1、crond是Linux用来定期执行程序的命令。当安装完成操作系统之后,默认便... 2、Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:  ①/etc/cron.deny 该文件中所列的用

    Linux 实现定时文件占用磁盘空间大小操作方法

    打开定时任务编辑,cent 默认使用vim直接打开。ubutun如果装了多种编辑器第一次打开的时候是指定编辑器的操作。 (3) */1 * * * * sh /root/Shell/monitor.sh 将这一行添加进文件中。表示每隔一分钟执行一次 sh /...

    Centos 7下利用crontab定时执行任务详解

    前言 cron服务是Linux的内置服务,但它不会开机...要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start 即可 查看当前用户的crontab,输入 crontab -l; 编辑crontab,输

    Linux调度命令2

    1.cron介绍 cron就是计划任务,通过crond服务定时执行任务。例如:定时运行脚本来监控系统或定时运行某些程序等。

    crontab执行结果未通过发送mail通知用户的方法

    在某台 centos7 主机上设置了某个 crontab 任务,但是到时间后运行 mail 后提示 No mail,即cron没有将任务的执行结果发送邮件通知到用户 排查过程 检查 crontab 日志 centos的日志由 systemd 进行管理的,因此可以...

Global site tag (gtag.js) - Google Analytics