Chinaunix首页 | 论坛 | 博客
  • 博客访问: 168706
  • 博文数量: 31
  • 博客积分: 999
  • 博客等级: 少尉
  • 技术积分: 310
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-27 15:14
文章分类

全部博文(31)

文章存档

2013年(2)

2012年(3)

2011年(18)

2010年(8)

分类: LINUX

2010-11-08 17:08:51

后台执行命令
crontab   系统调度进程 ,循环执行的例行性命令
at   at命令,特定时间运行特定作业
&后台提交作业  使用它在后台运行一个占用时间不长的进程
nohup命令提交作业 使用它在后台运行一个命令,即使在用户退出时也不受影响

计划任务 at  cron
一种是例行性的,就是每隔一定的周期要办的事项。
一种是突发性的,就是这次做完以后就没有的那种
at 工作仅执行一次就从linux系统的任务分配中取消。cron 工作将持续做下去。
at 这个指令其实就是 atd 这个服务啦!所以请记得一定要启动这个服务呦! ntsysv 或/etc/init.d/atd restart和chkconfig --level 35 atd on
at 默认的工作记录文件放在/var/spool/at下面,在写入at记录文件后,该工作便进入任务分配中并且等待执行。当然要让/var/spool/at目录下面的工作实际运行,必须要启动我们上面提到的atd服务。 我们可以用/etc/at.allow与/etc/at.deny这两个文件来限制用户对at的使用。如果两个文件都不存在,那么只有root可以使用at命令。
查找的顺序:先找/etc/at.allow 这里写的才能用,这里面没写的不能用,即使没在at.deny里面写,但是如果没有/etc/at.allow文件,就去找at.deny这个文件,写在这里面的不能用,没在这里面的则能用。如果两个档案都不存在,那么只有 root 可以使用 at 这个指令。这和cron是一样的。默认他们都是没有白名单的,需要的话可以建,其实没有有都一样。
一旦一个作业被提交,at命令将会保留所有当前的环境变量,包括路径,不象crontab,只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户,除非你对其输出进行了重定向,绝大多数情况下是重定向到某个文件中
at命令的基本形式为:
 at [-f script] [-m -l -r] [time] [date]
 其中,
 -f script 是所要提交的脚本或命令。
 -l 列出当前所有等待运行的作业。atq命令具有相同的作用。
 -r 清除作业。为了清除某个作业,还要提供相应的作业标识( ID);有些unix变体只接受atrm作为清除命令。
 -m 作业完成后给用户发邮件。
 time at命令的时间格式非常灵活;可以是H、HH . HHMM、HH : MM或H:M,其中H和M分别是小时和分钟。还可以使用a.m.或p.m.。
 date 日期格式可以是月份数或日期数,而且at命令还能够识别诸如today、tomorrow这样的词。
[test @test test]# at [-m] TIME    (下达工作指令)
[test @test test]# atq         (查看目前的工作排程)
[test @test test]# atrm [jobnumber]  (删除排程)
 -m 当at的工作完成后,以电子邮件的方式通知用户该工作已完成。
 TIME 时间格式,这里定义什么时候进行at工作,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 工作排程都有编排的顺序!这个即是!
例: at now + 5 minutes
       /bin/mail acb -s "test" < /root/tet.txt
           在这里输入ctrl+d 就会出现,代表结束。
 at 还可以在一个工作内输入多个命令。
 at -m 参数来强制at给您自己传送一个电子邮件消息,表时执行完毕。

使用at命令提交作业有几种不同的形式,可以通过命令行方式,也可以使用 a t命令提示符。 一般来说在提交若干行的系统命令时,我使用 at命令提示符方式,而在提交shell脚本时,使用命令行方式。
 如果想输入多条命令:at 时间 ---回车----输入命令-----CTRL+D
 如果想提交一个脚本:at 3.00pm tomorrow -f /apps/bin/db_table.sh 意思是明天下午3点执行db_table.sh脚本。也是 at 时间 -f 脚本(最好绝对路径)
 还可以使用echo命令向at命令提交作业:echo find /etc -name "root" -print | at now +1 minute
列出作业:at -l或atq  也可到/var/spool/at目录下看
清除一个作业
atrm [job on] 或 at -r [job no]
要清楚某个作业,首先要执行at -l命令,以获取相应的作业标识,然后对该作业标识使用at -r命令,请除该作业。
atrm job 3 就是清除3号作业
****************************************************************************************************************
cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业,有一个叫做crontab的命允许用户提交,编辑或删除相应的作业,每一个用户都可以有一个crontab文件来保存调度信息,可以使用他运行任意一个shell脚本或某个命令。时间自己定,每个用户都可以有自己的crontab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员通过cron.deny和cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。
用户的设置: crontab ,用户可以自行建立例行性命令,为了安全,我们可以限制使用crontab的用户账号。/etc/cron.allow /etc/cron.deny 检查顺序先查白明单,不看黑名单
 
当用户使用crontab命令建立工作任务分配后,该项工作就会被记录到/var/spool/cron中。而且是以账号来识别。如abc用户,他的记录/var/spool/cron/abc里面。cron执行的每一项任务用户都会记录到/var/log/cron这个登陆文件中,所以如果linux不知道是否被植入木马时,了民可以搜索/var/log/cron登陆文件。
crontab [-u username] [ -l | -e | -r ]
 -u 只有root才能执行这个任务,即帮其它用户建立/删除 crontab
 -e 编辑crontab的工作内容
 -l 查看ccrontab的工作内容
 -r 删除crontab的工作内容
 crontab -e
 0    12    *     *    *     mail abc -s "at 12:00" < /home/abc/test.txt
 分   时   日     月   周   ----------------命令串-----------------------------------
 这里周,0和7都表示星期天。
 ,表示分隔时段的意思,0 3,6 * * * command  表示3点和6点都适用。
 - 表示一段时间范围,8点到12点每个10分钟执行一次。 10 8-12 * * *  command
 /n  n代表数字,表示每隔n单位时间,例如每月分钟进行一次,则*/5 * * * * command   很简单,*与/5,也可以写成0-59、5,意思相同
 30 4 1,15 * 5   每周5或者1号和15他们执行
 * * 5 * * 意思是5点到6点,每分钟执行一次
 * * * * *       每分钟
 */1 每分钟
 不能写sbin下的命令,还有命令替换,$() ``
 init====$PATH /etc/rc.d/rc.sys
其实这里学习的主要就是关于这个时间,其它要注意的就是脚本要绝对路径,
 crontab -r 删除全部的工作
crontab 提交:可以直接编辑也可把一个写好的文件提交。
 直接编辑,crontab [-u user] -e 打开编辑
 提前写好一个文件提交,是把一个文件写好后,用crontab提交,如果,写了一个abc的文件,用crontab提交就是,crontab abc 这样就可以啦。

备份crontab, crontab -l > /root/mycron  这样误删除了,可以用文件提交的方法恢复。
crontab -e 是针对用户的cron来设计的,如果是系统的例行性任务,只要编辑/etc/crontab文件就可啦,其中crontab -e 中crontab其实是/usr/bin/crontab执行文件但/etc/crontab是一个纯文本文件。可以用户root身份编辑这个文件。
通常cron服务的最低检测限制是分钟,他会每分钟去读取一次/etc/crontab与/var/spool/cron中的数据内容.    每隔一分钟就去检查一次,所以最小精确为分钟
[root@localhost ~]# 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  root表示执行用户的身份
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
run-parts 表示后面接的/etc/cron.hourly 是一个目录内的所有可执行文件,表示多长时间执行一次,这个上目录下面的所有可执行文件。
一般的crontab文件支持两种,一种是目录规则类的,一种是命令规划类的
run-parts  就是代表一个文件的意思,目录
另外与crontab -e不同是的还多了一个用户级别的概念,意思是以谁的身份去执行

如果修改了某些条目或添加了新的条目,那么在保存该文件时, cron会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。
资源分配不均可以这样来做: 
[root@test /root]# vi /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root ........? <==那个 .. 代表你的指令
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root ........
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root ........
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root ........
 
nohup
执行一个进程,一个帐户退出后该进程还不会结束,哪就使用nohup。 nohup就是不挂起的意思(no hang up)
该命令的一般形式为: nohup command &
使用nohup命令提交作业
 如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名字为nohup.out的文件中,除非另外指定了输出文件。
 nohup command > myout.file 2>&1  这样被重定向到myout.file文件中
如果希望一次提交多个作业,最好能够把它们写入到一个shell脚本文件中。
阅读(2963) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-09 16:37:00

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com