linux 定时运行程序 转(一)

linux 定时运行程序 转(一)

crontab,无论root还是user都可以用。
基本用法:
 1. crontab -l
     列出当前的crontab任务
 2. crontab -d
     删除当前的crontab任务
 3. crontab -e (solaris5.8上面是 crontab -r)
     编辑一个crontab任务,ctrl_D结束
 4. crontab filename
     以filename做为crontab的任务列表文件并载入

crontab file的格式:
    crontab 文件中的行由 6 个字段组成,不同字段间用空格或 tab 键分隔。前 5 个字段指定命令要运行的时间
       分钟 (0-59)
       小时 (0-23)
       日期 (1-31)
       月份 (1-12)
       星期几(0-6,其中 0 代表星期日)
       第 6 个字段是一个要在适当时间执行的字符串

例子:
      #MIN HOUR DAY MONTH DAYOFWEEK COMMAND
      #每天早上6点10分
      10 6 * * * date
      #每两个小时
      0 */2 * * * date    (solaris 5.8似乎不支持此种写法)
      #晚上11点到早上8点之间每两个小时,早上8点
      0 23-7/2,8 * * * date
      #每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
      0 11 4 * mon-wed date
      #1月份日早上4点
      0 4 1 jan * date

[例7]
 # crontab -l #列出用户目前的crontab。
 10 6 * * * date
 0 */2 * * * date
 0 23-7/2,8 * * * date
 #
在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
第一项是分钟,第二项是小时,第三项是一个月的第几天,第四项是一年的第几个月,第五项是一周的星期几,第六项是要执行的命令。这些项都不能为空,必须填入。如果用户不需要指定其中的几项,那么可以使用*代替。因为*是统配符,可以代替任何字符,所以就可以认为是任何时间,也就是该项被忽略了。在表4-1中给出了每项的合法范围。
 表4-1 指定时间的合法范围
 时间
  合法值
 minute
  00-59
  hour
  00-23,其中00点就是晚上12点
  day-of-month
  01-31
  month-of-year
  01-12
  day-of-week
  0-6,其中周日是0

  这样用户就可以往crontab 文件中写入无限多的行以完成无限多的命令。命令域中可以写入所有可以在命令行写入的命令和符号,其他所有时间域都支持列举,也就是域中可以写入很多的时间值,只要满足这些时间值中的任何一个都执行命令,每两个时间值中间使用逗号分隔。

 除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。几个例子:
每天早上6点
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
每两个小时
0 */2 * * * echo "Have a break now." >> /tmp/test.txt
晚上11点到早上8点之间每两个小时,早上八点
0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line
1月1日早上4点
0 4 1 1 * command line
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ //使用者运行的路径,这里是根目录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本

大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。  
 [例8]
 5,15,25,35,45,55 16,17,18 * * * command
 这就是表示任意天任意月,其实就是每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。

  [例9] 在每周一,三,五的下午3:00系统进入维护状态,重新启动系统。那么在crontab 文件中就应该写入如下字段:
 00 15 * * 1,3,5 shutdown -r +5
  然后将该文件存盘为foxy.cron,再键入crontab foxy.cron安装该文件。
 [例10] 每小时的10分,40分执行用户目录下的innd/bbslin这个指令:
 10,40 * * * * innd/bbslink
  [例11] 每小时的1分执行用户目录下的bin/account这个指令:
  1 * * * * bin/account
 [例12] 每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):
  20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire$#@62;expire.1st)
 [例13] 每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。
 12,55 3 4-9 1,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt
 [例14] 我们来看一个超级用户的crontab文件:
  #Run the ‘atrun’ program every minutes
  #This runs anything that’s due to run from ‘at’.See man ‘at’ or ‘atrun’.
  0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
  40 7 * * * updatedb
  8,10,22,30,39,46,54,58 * * * * /bin/sync
  进程的挂起及恢复命令bg、fg
  作业控制允许将进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按〈ctrl+z$#@62;,即可挂起当前的前台作业。
 [例15]
  $ cat text.file
  〈ctrl+z$#@62;
  [1] + stopped cat text.file
  $ jobs
  [1]+ stopped cat text.file
  在键盘上按〈ctrl+z$#@62;后,将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。

  恢复进程执行时,有两种选择:用fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行。

  [例16] 用户正在使用Emacs,突然需要查看系统进程情况。就首先使用〈Ctrl+z$#@62;组合键将Emacs进程挂起,然后使用bg命令将其在后台启动,这样就得到了前台的操作控制权,接着键入“ps ?x”查看进程情况。查看完毕后,使用fg命令将Emacs带回前台运行即可。其命令格式为:
 〈Ctrl+z$#@62;
  $ bg emacs
  $ ps ?x
  $ fg emacs
  默认情况下,fg和bg命令对最近停止的作业进行操作。如果希望恢复其他作业的运行,可以在命令中指定要恢复作业的作业号来恢复该作业。例如:
  $ fg 1
  cat text.file

 

 

 

文件

 

 

含义

 

 

/etc/cron.deny

 

 

该文件中所列的用户不允许使用Crontab命令

 

 

/etc/cron.allow

 

 

该文件中所列的用户允许使用Crontab命令

 

 

/var/spool/cron/

 

 

是所有用户的crontab文件

 

 

/var/spool/cron/crontabs

 

 

/var/spool/cron/crontabs

 

 


Crontab命令的格式为:crontab –l|-r|-e|-i [username],其参数含义如表一:

 

参数名称

 

含义

 

示例

 

 

-l

 

显示用户的Crontab文件的内容

 

crontabl –l

 

 

-i

 

删除用户的Crontab文件前给提示

 

crontabl -ri

 

 

-r

 

 

从Crontab目录中删除用户的Crontab文件

 

 

crontabl -r

 

 

-e

 

 

编辑用户的Crontab文件

 

 

crontabl -e

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值