`

linux下定时任务

阅读更多


原文地址:http://blog.csdn.net/tianlesoftware/article/details/5315039

一.  Crontab 介绍

       crontab命令的功能是在一定的时间间隔调度一些命令的执行。

1.1 /etc/crontab 文件
       在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。
     
如:
[root@dave ~]# cat /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

1.2 /etc/cron.deny 和 /etc/cron.allow 文件

/etc/cron.deny 表示不能使用crontab 命令的用户
/etc/cron.allow 表示能使用crontab的用户。

如果两个文件同时存在,那么/etc/cron.allow 优先。
如果两个文件都不存在,那么只有超级用户可以安排作业。


每个用户都会生成一个自己的crontab 文件。这些文件在/var/spool/cron目录下:

如:
[root@dave ~]# cd /var/spool/cron
[root@dave cron]# ls
oracle  root

我们直接查看这个文件,里面的内容和对应用户显示的crontab -l 一致。
[root@dave cron]# cat oracle
00 6 * * * /u02/scripts/del_st_archive.sh >/u02/scripts/del_st_arch.log 2>&1
[root@dave cron]# cat root
0 12 * * * /root/bin/sync-clock.sh
[root@dave cron]#


二.  Crontab 使用说明

2.1  Crontab语法
usage:  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)

       其中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。


帮助:
[root@dave ~]# man crontab
CRONTAB(1)                                                          CRONTAB(1)

NAME
       crontab - maintain crontab files for individual users (ISC Cron V4.1)

SYNOPSIS
       crontab [-u user] file
       crontab [-u user] [-l | -r | -e] [-i] [-s]

DESCRIPTION
       Crontab  is the program used to install, deinstall or list the tables used to drive the cron(8) daemon in ISC Cron.  Each user can have their own crontab,  and  though these  are  files in /var/spool/ , they are not intended to be edited directly. For SELinux in mls mode can be even more crontabs  -  for  each  range.  For  more  see selinux(8).
       If  the  cron.allow  file  exists,  then  you must be listed therein in order to be allowed to use this command.  If  the  cron.allow  file  does  not  exist  but  the cron.deny  file  does  exist,  then you must not be listed in the cron.deny file in order to use this command.  If neither of these files exists, only the  super  user will be allowed to use this command.

OPTIONS
       -u     It  specifies  the name of the user whose crontab is to be tweaked.  If this  option is not given, crontab examines "your" crontab, i.e., the  crontab  of the  person  executing the command.  Note that su(8) can confuse crontab and               that if you are running inside of su(8) you should always use the -u  option               for  safety¡¯s sake.  The first form of this command is used to install a new               crontab from some named file or standard input if the pseudo-filename "-" is               given.
       -l     The current crontab will be displayed on standard output.
       -r     The current crontab will be be removed.
       -e     This  option  is used to edit the current crontab using the editor specified by the VISUAL or EDITOR environment variables.  After you exit from the edi-tor, the modified crontab will be installed automatically.
       -i     This  option  modifies the -r option to prompt the user for a ¡¯y/Y¡¯ response before actually removing the crontab.
       -s     It will append the current SELinux security context string as  an  MLS_LEVEL setting  to  the  crontab file before editing / replacement occurs - see the documentation of MLS_LEVEL in crontab(5).

SEE ALSO
       crontab(5), cron(8)
FILES
       /etc/cron.allow
       /etc/cron.deny
STANDARDS
       The crontab command conforms to IEEE Std1003.2-1992 (¡®¡®POSIX¡¯¡¯).  This new  command syntax  differs  from  previous versions of Vixie Cron, as well as from the classic
       SVR3 syntax.
DIAGNOSTICS
       A fairly informative usage message appears if you run it with a bad command line.
AUTHOR
       Paul Vixie <vixie@isc.org>
4th Berkeley Distribution       16 Januar 2007                      CRONTAB(1)





2.2  Crontab 格式说明
       我们可以用crontab -e 添加要执行的命令。 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。
     
   添加的命令必须以如下格式:
   * * * * * /command path
     
       前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。

前5个字段分别表示:
       分钟:0-59
       小时:1-23
       日期:1-31
       月份:1-12
       星期:0-6(0表示周日)

还可以用一些特殊符号:
       *: 表示任何时刻
       ,: 表示分割
  -:表示一个段,如第二端里: 1-5,就表示1到5点
       /n : 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.


一些示例:
00 8,12,16 * * * /data/app/scripts/monitor/df.sh
30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh
10 8,12,16 * * * /data/app/scripts/monitor/check_ind_unusable.sh
10 8,12,16 * * * /data/app/scripts/monitor/check_maxfilesize.sh
10 8,12,16 * * * /data/app/scripts/monitor/check_objectsize.sh

43 21 * * * 21:43 执行
15 05 * * *    05:15 执行
0 17 * * * 17:00 执行
0 17 * * 1 每周一的 17:00 执行
0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行
0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行
0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行
42 4 1 * *     毎月1日的 4:42分 执行
0 21 * * 1-6   周一到周六 21:00 执行
0,10,20,30,40,50 * * * * 每隔10分 执行
*/10 * * * *        每隔10分 执行
* 1 * * *         从1:0到1:59 每隔1分钟 执行
0 1 * * *         1:00 执行
0 */1 * * *        毎时0分 每隔1小时 执行
0 * * * *         毎时0分 每隔1小时 执行
2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行
30 5 1,15 * *       1日 和 15日的 5:30 执行


2.3  & 后台执行命令

       当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。

       如:
       30 2 * * * /data/app/scripts/hotbackup/hot_database_backup.sh &

       在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。
       不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
       如:
              command >out.file 2>&1 &

       在这个例子中,2>&1表示所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

2.4  2>&1 含义

先看一个例子:
0 2 * * * /u01/test.sh >/dev/null 2>&1 &

这句话的意思就是在后台执行这条命令,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null 文件,也就是清空。

在这里有有几个数字的意思:
       0表示键盘输入
       1表示标准输出
       2表示错误输出.


我们也可以这样写:
0 2 * * * /u01/test.sh  >/u01/out.file &  --这里没写,默认是1
0 2 * * * /u01/test.sh  1>/u01/out.file &
0 2 * * * /u01/test.sh  2>/u01/out.file &
0 2 * * * /u01/test.sh  2>/u01/out.file  2>&1 &

将tesh.sh 命令输出重定向到out.file, 即输出内容不打印到屏幕上,而是输出到out.file文件中。

2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件out.file。
&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。

& :后台执行

测试:
ls 2>1 : 不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1: 没有xxx这个文件的错误输出到了1中;
ls xxx 2>&1: 不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1 == ls xxx 1>out.txt 2>&1;  因为重定向符号>默认是1,这句就把错误输出和标准输出都传到out.txt 文件中。


2.5  2>&1写在后面的原因
       格式:command > file 2>&1   == command  1> file 2>&1

       首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

如果改成: command 2>&1 >file
       2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

分享到:
评论

相关推荐

    linux下定时任务设置.docx

    Linux 下定时任务设置 Linux 操作系统提供了一个强大的定时任务设置机制,即 cron 服务。cron 服务允许用户设置在特定的时间或间隔执行特定的命令或脚本。下面将详细介绍 Linux 下定时任务设置的知识点。 一、创建...

    Linux 下定时任务使用详解

    【Linux 下定时任务使用详解】 Linux 系统中的定时任务主要通过 `cron` 服务来实现,它允许用户和系统管理员设置周期性被执行的任务。`cron` 是 Linux 的一个核心组件,但不会自动启动,需要手动操作或设置为开机...

    Linux下定时任务,命令启停jar包服务

    Linux 下的定时任务和 jar 包服务管理 Linux 作为一款流行的操作系统,提供了许多强大的功能,其中之一就是定时任务的管理。定时任务允许用户在指定的时间执行特定的命令或程序,从而实现自动化操作。在 Linux 中,...

    linux下定时执行计划任务

    本文将详细介绍如何在 Linux 系统中配置和管理定时任务。 #### 二、核心概念与配置文件 Linux 的定时任务主要通过 `cron` 服务来实现。`cron` 是一个守护进程,用于调度定时任务。它的配置主要分布在几个文件中: ...

    linux服务器配置定时任务教程

    ### Linux服务器配置定时任务教程 #### 一、引言 Linux系统因其稳定性和安全性而被广泛应用于服务器领域。其中,定时任务是Linux服务器管理中一个非常实用的功能,它可以帮助我们自动执行一些周期性的任务,如数据...

    linux定时任务设置

    "Linux 定时任务设置" Linux 定时任务设置是 Linux 操作系统中的一种功能,允许用户设置定时执行某些任务的时间和频率。本文将详细介绍如何在 Linux 中使用 crontab 命令来设置定时任务,并对其格式、参数和使用...

    Linux定时任务

    详细介绍了Linux定时任务的shell代码,需要使用定时任务的可以参考下

    Linux定时任务1

    Linux定时任务是Linux系统中非常重要的功能,它允许用户或系统自动执行预定的任务,无需人工干预。这在服务器管理和自动化运维中尤其有用。本文将详细探讨Linux定时任务的相关知识点。 首先,程序是预编写的执行...

    linux定时执行任务脚本

    要实现这个功能,我们可以利用Linux的cron服务,它是一个强大的定时任务调度器。本文将深入探讨如何创建和管理Linux定时执行任务脚本。 首先,我们需要了解cron服务的工作原理。cron在后台运行,周期性地检查/etc/...

    Linux下实现定时任务综述.pdf

    Linux 下实现定时任务综述 Linux 操作系统作为一个流行的开源操作系统,广泛应用于服务器、云计算、嵌入式系统等领域。然而,在 Linux 系统运维过程中,经常会遇到需要定时或周期性地执行一些命令或脚本的情况。...

    Linux定时任务以及脚本编写docx

    本文档将详细介绍如何创建和配置Linux定时任务,以及编写和执行简单的shell脚本。 首先,让我们看看脚本样例1,这是一个用于监控Linux服务器性能的bash脚本。它包含以下几个关键部分: 1. **获取服务器IP地址**:...

    springboot的定时任务配置和linux的crontab一样例子.zip

    springboot的定时任务配置和linux的crontab一样例子.zipspringboot的定时任务配置和linux的crontab一样例子.zipspringboot的定时任务配置和linux的crontab一样例子.zip

    linux下定时执行脚本

    本篇将基于标题"Linux下定时执行脚本"来详细讲解如何在Linux环境下设置定时任务,并结合提供的文件`hourexec.script`和`hourexec.sh`来探讨相关知识。 首先,我们要了解Linux下的计划任务工具——`cron`。`cron`是...

    Linux下定时备份文件.zip_数据库定时备份

    4. **配置cron计划任务**:打开cron配置文件(通常为`crontab -e`),然后根据需求设置定时任务。如果要每7天执行一次,可以设置如下: ``` 0 0 * * 7 /path/to/backup.sh ``` 这将在每周日的凌晨0点执行`...

    linux crontab 定时任务脚本

    NULL 博文链接:https://caoyaojun1988-163-com.iteye.com/blog/1698192

    linux中定时任务的讲解

    Linux中的定时任务 在 Linux 系统中,定时任务是一个非常重要的功能,它允许用户在指定的时间执行特定的命令或程序。今天,我们将深入探讨 Linux 中的定时任务,包括计划任务的类型、实现方法、at 命令、batch 命令...

    Linux下定时执行脚本

    Linux 下的定时执行脚本可以通过 crontab 文件来实现,通过设置环境变量、crontab 文件格式、星号(*)和连字号(-)的使用、步进设置、注释行、定期执行任务和用户定时执行等来实现各种定时执行任务。

    linux下oracle定时备份

    Oracle数据库的定时备份通常借助于Linux的cron服务来实现,这是一个强大的定时任务调度器。在Redhat Linux Enterprise 5中,Oracle 10g版本的数据库管理员可以通过配置crond服务和编写脚本来安排自动备份。 首先,...

    Linux Crontab 定时任务 命令详解

    Linux Crontab 定时任务 命令详解 Linux Crontab 是一个强大的定时任务命令,用于在指定的时间间隔执行特定的命令或程序。Crontab 命令的功能是在一定的时间间隔调度一些命令的执行,通过编写 Crontab 文件来实现。...

Global site tag (gtag.js) - Google Analytics