现在的位置: 首页 > 综合 > 正文

linux定时启动程序的命令详解

2013年09月20日 ⁄ 综合 ⁄ 共 4165字 ⁄ 字号 评论关闭

【定时启动你的linux程序】
*********************************************************
最小模型例子:
你的程序:
vi hello.sh
  1 #! /bin/sh
  2
  3 echo "hello world"
  4
你的任务:
crontab -e
  00 15 18 10 * mail hfx < /home/hfx/shell/hello.sh

ok!
你的sh脚本将在今年的10月18日15:30分执行
查看你的任务:
crontab -l
删除你的任务:
crontab -r // 注意所有都删除了
还是进入你的crontab -e,将你需要删除的任务删除比较好!
*********************************************************

[选择at 或者 crond]

仅执行一次的工作排程
如果仅要执行一次的工作,就使用 at 这个指令吧!
如果你是要循环的安排,那么就选用crond吧!
当然后则也能容易的实现一次。

[查看你的用户权限]

首选看你的用户是否有权限执行at命令,查看方法:

在任何情况下,终极用户都能够使用这个命令。对于其他用户来说,是否能够使用就取决于两个文档:/etc/at.allow和/etc/at.deny。
假如/etc/at.allow文档存在的话,那么只有在其中列出的用户才能够使用linux at命令;假如该文档不存在,那么将检查/etc/at.deny文档
是否存在,在这个文档中列出的用户均不能使用该命令。
假如两个文档都不存在,那么只有终极用户能够使用该命令;空的/etc/at.deny文档意味着所有的用户都能够使用该命令,这也是默认状态。

简单的shell指令查看如下:ll /etc/at.*
如果存在以下两个文件:at.allow,at.deny

[使用说明]
以下是at和crontab语法的使用规则,摘自《鸟哥的linux》,提供参考。因为看的很清晰,所有,没有什么可以比它讲的更好的了
/////////////////////////////////////////////////////////at///////////////////////////////////////////////////////////
[test @test test]# at [-m] TIME    (下达工作指令)
[test @test test]# atq         (查看目前的工作排程)
[test @test test]# atrm [jobnumber]  (删除排程)
参数说明:
-m    :执行 at 所规范的工作排程时,将屏幕输出结果 mail 给下达指令的用户
TIME  :时间的格式,有底下几个:
   HH:MM YYYY-MM-DD             ex> 04:00 2002-05-30 (五月三十号四点执行)
   HH[pm;am] + number [hours;days;weeks]  ex> 4pm + 3 days (在过 3 天的下午 4 点)
   HH:MM                  ex> 12:00 (今天的 12 点执行)
   HH[pm;am] [Month] [Day]         ex> 1pm May 30
jobnumber:每一个 at 工作排程都有编排的顺序!这个即是!
范例:
[test @test test]# at 5pm   <==在今天的 5pm 执行,如果今天已过 5 点则明天执行;
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at> mail -s test test < /home/test/.bashrc <==这就是我的工作!
at> <==这里是按下 [Ctrl] + D 就可以离开了!
job 8 at 2002-05-30 17:00  <==这里会告诉你这个工作的号码为 8 号,执行的日期为后面所示。

[test @test test]# atq   <==窥视一下你(test)目前有多少工作?
5       2002-05-30 12:00 a test
8       2002-05-30 17:00 a rest

[test @test test]# atrm 5<==删除第 5 号工作
[test @test test]# atq
8       2002-05-30 17:00 a rest

推荐你at你的时间格式为标准格式如下:
at 17:30 2/24/99
这样的格式时间清晰,容易被开发人员所确定。99年2月24日17时30分

[启动与关闭]

/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置

[at 添加、查看、删除]
at服务:安排一个任务在未来执行,需要一个atd的系统后台进程
#at now+2 minutes 回车
>输入要执行的命令
>ctrl+d 结束输入

atq;查询当前的等待任务
用atq来查询,已经运行的任务,就消失了。这就是at计划任务的重点,只运行一次
atrm:删除等待任务
启动计划任务后,如果不想启动设定好的计划任务可以使用atrm命令删除。
格式:atrm 任务号
命令后面跟计划任务编号,如果不跟,就会删除这个用户所有的计划任务。

还可以进入到/var/spool/at目录里把计划任务删除,计划任务的文件都保存在该目录里,
可以用rm -f 文件名来删除(以文件的形式删除计划任务,因为计划任务是以文件形式保存在该目录中)

在通常情况下,超级用户都可以使用这个命令。对于其他用户来说,能否可以使用就取决于两个文件:/etc/at.allow和/etc/at.deny

如果你要让哪个用户不能使用计划任务,就直接把他的用户名写进去就可以了,一排只能写一个。
同时写入allow 及deny, 允许.

[查看你的email]

进入/var/spool/mail查看你的计划任何执行结果。

/////////////////////////////////////////////////////////crontab///////////////////////////////////////////////////////////
[test @test test]# crontab [-u user] [-l | -e | -r]
参数说明:
-u user :只有 root 能下达的参数,视察或编译其他使用者的 crontab 内容
-l      :列出 crontab 的内容
-e      :编辑 crontab 的内容
-r      :删除 crontab 的内容
范例:
一般使用者 test 要在每天的 12:00 发信给自己:
[test @test test]# crontab -e <==自己编辑自己的 crontab 内容

进入 crontab 编辑内容,使用 vi 呦!

0 12 * * * mail test < /home/test/test.txt
分时日月周 |========指令列===============|

例题一:假如你的女朋友生日是 5 月 2 日,你想要在 5 月 1 日的 23:59 发一封信给他,
    这封信的内容已经写在 /home/test/lover.txt 中了
[test @test test]# crontab -e

59 23 1 5 * mail pigpp < /home/test/lover.txt
 
那样的话,每年 pigpp 都会收到你的这封信喔!(当然啰,信的内容就要每年变一变啦!)
  例题二:假如你每隔五分钟要去 check 你的一个名为 test.sh 的批处理文件一次,则:
[test @test test]# crontab -e

59 23 1 5 * mail pigpp < /home/test/lover.txt  <==刚刚的那个指令还存在呦!
*/5 * * * * /home/test/test.sh  <==新加入的一个排程!
 
注意到呦!那个 crontab 每个人都只有一个档案,就是在 /var/spool/cron 里面的档案啦!还有两件事要注意一下:
(1) 指令的路径最好是下达绝对路径,这样比较不会找不到执行的档案喔;
(2) 第一个数字 */5 表示『每五分钟执行一次』的意思!
例题三:假如你每个礼拜的星期五下午 4:30 要告诉朋友星期六的约会不要忘记,则:
[test @test test]# crontab -e

59 23 1 5 * mail pigpp < /home/test/lover.txt 
*/5 * * * * /home/test/test.sh
30 16 * * 5 mail frend@test.domain.name < /home/test/frend.txt <==新加入的!
 
呵呵!这样很简单吧!如此就可以轻易的达到您所需要的例行性工作排程的安排啰!
好了!那么我们要如何来查看使用者目前的 crontab 的工作排程呢?
  [test @test test]# crontab -l <==这个 -l 是 L 的小写
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.27683 installed on Thu May 30 13:38:38 2002)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
59 23 1 5 * mail pigpp < /home/test/lover.txt
*/5 * * * * /home/test/test.sh
30 16 * * 5 mail frend@test.domain.name < /home/test/frend.txt
呵呵呵!其实这个显示的内容就是 /var/spool/cron/test 档案的内容啦!那么如何删除排程呢?
  [test @test test]# crontab -r
[test @test test]# crontab -l
no crontab for test
看到了吗? crontab 『整个内容都不见了!』所以请注意:『如果只是要删除某个 crontab 的工作项目,那么请使用 crontab -e 来重新编辑即可!』
如果使用 -r 的参数,是会将所有的 crontab 数据内容都删掉的!千万注意了!
 

抱歉!评论已关闭.