【定时启动你的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 数据内容都删掉的!千万注意了!
|