`
clound23
  • 浏览: 12923 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

cron

阅读更多

http://www.examda.com/linux/fudao/20101025/120902175.html

Linux自启动和定时启动程序

 

1.开机启动时自动运行程序

  Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程, 启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目录下的脚本文件,可以使 init自动启动其它程序。例如:编辑 /etc/rc.d/rc.local 文件,在文件最末加上一 行“xinit”或“startx”,可以在开机启动后直接进入X-Window。

  2.登录时自动运行程序

  用户登录时,bash首先自动执行系统管理员建立的全局登录script :/ect/profile。然后bash在用户起始 目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、/.profile,但只执行最先找到的 一个。

  因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的 Autoexec.bat)。

  3.退出登录时自动运行程序

  退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。例如,在/.bash_logout中加入命令“tar -cvzf c.source.tgz *.c”,则在每次退出登录时自动执行 “tar” 命令备份 *.c 文件。

  4.定期自动运行程序

  Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内 容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。

  例如,建立文件crondFile,内容为“00 9 23 Jan * HappyBirthday”,运行“crontab cronFile”命令 后,每当元月23日上午9:00系统自动执行“HappyBirthday”的程序(“*”表示不管当天是星期几)。

  5.定时自动运行程序一次

  定时执行命令at 与crond 类似(但它只执行一次):命令在给定的时间执行,但不自动重复。at命令的一 般格式为:at [ -f file ] time ,在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命 令:

  $ at 12:00

  at>mailto Roger -s ″Have a lunch″ < plan.txt

  at>Ctr-D

  Job 1 at 2000-11-09 12:00

  2000-11-09 12:00时候自动发一标题为“Have a lunch”,内容为plan.txt文件内容的邮件给Roger。

  定期运行程序或者脚本是管理员要面临一个很普遍的问题,

  一、 使用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,详细请参考下面的连接:

  linuxts.com/doc/rhl-cg-zh_CN-9/s1-autotasks-at-batch.html">http://www.linuxts.com/doc/rhl-cg-zh_CN-9/s1-autotasks-at-batch.html

  [root@pps ~]# mail -s "hi, snail, i'm root" snail < 邮件内容

  -s   主题

  -c   抄送

  -b   暗送

  mail的使用:

  Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...

  [-- sendmail-options ...]

  mail [-iInNv] -f [name]

  mail [-iInNv] [-u user]

  详细的mail使用说明可以 # man mail

  经常用root帐号登录RHEL5,在终端经常出现:

  You have new mail in /var/spool/mail/root

  这肯定是系统给root超级管理员发的一些通知邮件,我常用mail命令来查看。

  【注意】下面mail命令的help帮助是我个人随便翻译的,准确的请看英文说明

  [root@pps mail]# mail

  Mail version 8.1 6/6/93.  Type ? for help.

  "/var/spool/mail/root": 24 messages 24 unread

  >U  1 logwatch@rhel5-pps.h  Mon Feb 16 17:27 117/3862  "Logwatch for rhel5-pp"

  U  2 logwatch@rhel5-pps.h  Mon Feb 16 17:27 107/3658  "Logwatch for rhel5-pp"

  ...

  U 20 logwatch@pps.hoho.co  Wed Mar 11 10:10 139/4567  "Logwatch for pps.hoho"

  U 21 root@pps.hoho.com     Wed Mar 11 13:15  20/664   "Re: Warning: could no"

  U 22 MAILER-DAEMON@pps.ho  Wed Mar 11 13:15  71/2294  "Returned mail: see tr"

 

& help //如果不会使用或者忘记了什么命令,就输入 help 或者 ? 来获取帮助

  Mail   Commands

  t <message list>                打印出信息 【注意】多个信息用空格分开,如 t 1 7

  n                                    打印出下一条信息

  e <message list>                编辑信息

  f <message list>                输出信息的头行

  d <message list>                删除信息

  s <message list> file           追加信息到文件file

  u <message list>                不删除某信息

  R <message list>                回复发件人

  r <message list>                回复发件人和本信息所有的收件人

  pre <message list>              保留信息在 /usr/spool/mail  1*

  m <user list>                   发邮件,多个收件人用空格分开【需要sendmail支持】

  q                               quit, saving unresolved messages in mbox 2*

  x                               quit, do not remove system mailbox

  h                               print out active message headers

  !                               让shell执行某命令,如 !ls 输出ls命令结果

  cd [directory]                  改变目录,这里不用 !cd,但打印当前目录需要 !pwd

  A <message list> consists of integers, ranges of same, or user names separated

  by spaces.  If omitted, Mail uses the last message typed.

  A <user list> consists of user names or aliases separated by spaces.

  Aliases are defined in .mailrc in your home directory.

  1* 如果阅读过某信息,执行q退出时候,mail会把阅读过的信息“取回”放在 ~/mbox,执行pre后就不取回。如果退出时执行x命令则不会取回信息。

  2* 这三句不难理解,但不好翻译(本人水平问题),也就保留原文了

  所支持的全部命令列表:

  & l

  Commands are:

  next, alias, print, type, Type, Print, visual, top, touch, preserve,

  delete, dp, dt, undelete, unset, mail, mbox, more, page, More, Page,

  unread, U, !, copy, chdir, cd, save, source, set, shell, version,

  group, write, from, file, folder, folders, ?, z, headers, help, =,

  Reply, Respond, reply, respond, edit, echo, quit, list, xit, exit,

  size, hold, if, else, endif, alternates, ignore, discard, retain,

  saveignore, savediscard, saveretain, core, #, clobber

  & t 7        //阅读第7封信息,阅读时,按空格键就是翻页,按回车键就是下移一行

  & d 10     //删除第10封信息

  & d 10-100 //删除第10-100封信息

  & top      //显示当前指针所在的邮件的邮件头

  & file       //显示系统邮件所在的文件,以及邮件总数等信息

  & x          //退出mail命令平台,并不保存之前的操作,比如删除邮件

  & q         //退出mail命令平台,保存之前的操作,比如删除已用d删除的邮件,

  //已阅读邮件会转存到当前用户家目录下的mbox文件中

  //如果在mbox中删除文件才会彻底删除。

  如果邮件被收取放到 ~/mbox 可以这样查看它们:

  # mail -f ~/mbox

  进入 mail 程序后的操作都很简单,但是可以不进入 mail 的 & 操作提示符界面,下面举几个实用例子:

  1、给 snailwarrior@qq.com 发信

  [root@pps ~]# mail snailwarrior@qq.com

  Subject: Hi, a mail to snailwarrior!

  This is hoho_zhao in BeiJing.

  .

  Cc: <Enter> //直接输入回车就不抄送给谁了

  【注意】使用.或者Ctrl+D来结束内容输入

  【注意】默认情况下连按两次Ctrl+C键中断工作

  2、如果 snail 是本系统用户,这样给他发信

  [root@pps ~]# mail -s "hi, snail, i'm root" snail

  plz reply me, snail.

  .

  Cc:

  或者

  [root@pps ~]# mail -s "hi, snail, i'm root" snail < 邮件内容

  -s   主题

  -c   抄送

  -b   暗送

  mail的使用:

  Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...

  [-- sendmail-options ...]

  mail [-iInNv] -f [name]

  mail [-iInNv] [-u user]

  详细的mail使用说明可以 # man mail

  文件                 用途

  /var/spool/mail/*    邮局(Post office)

  ~/mbox               用户老邮件

  ~/.mailrc            mail的初始化命令。只有在mail使用者是这个文件的所有者时

  候才执行此文件里的mail初始化命令

  /tmp/R*              临时文件

  /usr/lib/mail.*help  帮助文件

  /etc/mail.rc         mail系统初始化文件

  因为mail的还得靠sendmail来投递邮件,根据网上资料可以这样查看sendmail是否有邮件待发,如果没有,说明邮件全都发送出去了。(当然你的sendmail服务要开着)

  [root@pps ~]# sendmail -bp

  /var/spool/mqueue is empty

  Total requests: 0

分享到:
评论

相关推荐

    vue-cron_vue-cron_vuecrond组件_vuecron_

    Vue-Cron是一款基于Vue.js开发的时间周期(Cron)表达式组件,用于在前端应用程序中创建、编辑和处理定时任务。Vue-Cron旨在提供一种直观的用户界面,让用户能够通过图形化的方式设置复杂的Cron表达式,从而实现定时...

    C# Cron表达式解析 .net

    C# Cron表达式解析在.NET开发中是一种常见且重要的任务,尤其在自动化任务调度和计划程序的场景下。Cron表达式源于Unix操作系统,用于定义周期性任务的执行时间。在C#中,通过理解并解析Cron表达式,开发者可以创建...

    cron中英文表达式

    cron是Unix/Linux操作系统中的一个调度任务工具,用于设置周期性被执行的任务。它的名称来源于古英语单词"crone",象征时间的流转。在JavaScript中,我们可以利用类似cron的表达式来实现定时任务,例如通过`jquery-...

    cron表达式cron生成器

    cron表达式是Unix/Linux系统中用于安排周期性任务的调度工具,它允许用户根据特定的时间间隔定义任务执行的计划。这个“cron表达式cron生成器”可能是为了简化cron表达式的创建过程而设计的一个在线工具或者软件,...

    Cron前端生成工具

    【Cron前端生成工具】是一种方便用户在前端环境中设置和管理Cron表达式的实用工具,类似于http://cron.qqe2.com/所提供的在线服务。Cron是Unix/Linux系统中的一种任务调度命令,允许用户预设定时任务,按照指定的...

    vixie-cron-4.1.rar_centos-s002_crontab source code_vixie-cron_vi

    《vixie-cron-4.1:CentOS下的crontab定时任务源代码解析》 在Linux系统中,crontab是用于设置周期性被执行的任务的工具,它源自著名的Unix系统工具cron。Vixie-cron是cron的一个实现版本,由Paul Vixie开发,广泛...

    Cron表达式Html源码

    Cron表达式是一种广泛用于计划任务调度的工具,它源于Unix系统,现在也被许多其他操作系统和编程语言支持,包括Java、Python、Node.js等。这种表达式定义了一种时间格式,用于描述周期性的任务执行时间。 Cron...

    js cron 表达式生成器

    `node-cron`库允许在Node.js环境中创建`cron`定时任务,而`cron-parser`则提供了解析和验证`cron`表达式的能力。 总的来说,`js cron表达式生成器`是开发者不可或缺的工具,它简化了`cron`表达式的创建和管理,提高...

    Cron_cron_Cron表达式解析_

    Cron是一种广泛使用的任务调度工具,它源自Unix操作系统,用于安排周期性的任务执行。Cron表达式是Cron系统的核心,它定义了任务的执行时间。在这个“Cron_cron_Cron表达式解析_”的资源中,我们将深入探讨Cron...

    Cron表达式生成器.zip可反向解析

    Cron表达式是一种在Unix和类Unix系统中广泛使用的任务调度工具,用于设置定时任务。它基于特定的时间格式,允许用户定义精确到秒的任务执行计划。Cron表达式的语法复杂,但功能强大,可以实现从每日一次到每分钟一次...

    cron表达式生成_html

    cron表达式是Unix/Linux系统中用于调度任务的机制,它允许用户设置周期性的计划任务。在Web开发中,我们有时需要在服务器端实现定时任务,这时就可以借助cron表达式。这个压缩包“cron表达式生成_html”提供了一个纯...

    Cron生成表达式html源码

    Cron表达式是Quartz中一个核心的概念,用于定义定时任务的执行计划。 Cron表达式是由七个子表达式组成的字符串,每个子表达式代表不同的时间元素:秒、分钟、小时、日期、月份中的日期、月份和星期几。这些元素用...

    cron表达式自动生成

    cron表达式是Linux系统中用于设置周期性任务的工具,它是Cron Job的核心部分。这个“cron表达式自动生成”工具则提供了一种便捷的方式来创建这些复杂的表达式,尤其适合那些不熟悉cron语法或者需要快速设定定时任务...

    Cron表达式解析 翻译为中英文.zip

    【标题】:Cron表达式解析 - 中英文对照 Cron表达式是Unix/Linux系统中的定时任务调度器Cron所使用的语法,也被广泛应用于Java世界,例如Quartz、Spring等框架。它允许用户以字符串的形式定义任务的执行时间,如...

    Cron表达式生成器html源码

    Cron表达式是一种在计算机程序中广泛使用的定时任务调度工具,尤其在Java的Quartz框架中,它扮演着核心角色。Cron表达式允许我们用一种简洁的方式定义一系列的时间计划,比如每天的某个时间点执行某项任务。下面将...

    cron(动态生成cron表达式)

    cron是Unix/Linux操作系统中的一个定时任务调度命令,用于设置周期性被执行的任务。在这个场景中,我们讨论的是一个基于Vue的Cron表达式组件,它允许用户在前端界面中动态生成和配置cron表达式。Vue.js是一个流行的...

    cron表达式自动生成页面版

    cron表达式是Unix/Linux系统中的一个调度工具,用于在特定时间执行预定的任务。在Java世界中,Spring框架也广泛使用cron表达式来实现定时任务。这个"cron表达式自动生成页面版"是一个实用的工具,它允许用户在网页...

    vixie-cron-4.1.rar

    《Linux系统下的Vixie-cron 4.1:深入解析与应用》 在Linux操作系统中,定时任务的管理是一项至关重要的工作,它允许系统在指定的时间执行一系列自动化任务,如备份、日志清理、系统维护等。Vixie-cron是Linux下...

    可直接使用-cron表达式前端生成工具.zip

    cron表达式是一种在Unix和其他类Unix系统中广泛使用的定时任务调度工具,用于配置计划任务的执行。这个压缩包“可直接使用-cron表达式前端生成工具.zip”提供了一个基于HTML、CSS和JavaScript实现的前端工具,它使得...

    layui第三方组件cron的使用

    在layui中,我们可以引入第三方组件来扩展其原生功能,例如使用cron组件来处理定时任务的配置和展示。本文将详细介绍如何在layui项目中集成并使用cron第三方组件。 1. **安装cron组件** 在使用cron组件前,首先...

Global site tag (gtag.js) - Google Analytics