Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5225851
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: LINUX

2008-02-26 11:03:00

  -m 作业完成后给用户发邮件。

  time at命令的时间格式非常灵活;可以是H、H H.H H M M、H H : M M或H : M,其中H和M

  分别是小时和分钟。还可以使用a.m .或p.m .。

  date 日期格式可以是月份数或日期数,而且at命令还能够识别诸如t o d a y、t o m o r r o w这样的词。

  2.1 使用at命令提交命令或脚本

  使用at命令提交作业有几种不同的形式,可以通过命令行方式,也可以使用at命令提示符。

   一般来说在提交若干行的系统命令时,我使用at命令提示符方式,而在提交shell脚本时,使用命令行方式。如果你想提交若干行的命令,可以在at命令 后面跟上日期/时间并回车。然后就进入了at命令提示符,这时只需逐条输入相应的命令,然后按‘ < C T R L - D >’退出。下面给出一个例子:

  其中, < E O T >就是< C T R L - D >。在2 1 : 1 0系统将执行一个简单的f i n d命令。你应当已经注意到,我所提交的作业被分配了一个唯一标识job 1。该命令在完成以后会将全部结果以邮件的形式发送给我。

  下面就是我从这个邮件中截取的一部分:

  下面这些日期/时间格式都是at命令可以接受的:

  如果希望向at命令提交一个shell脚本,使用其命令行方式即可。在提交脚本时使用- f选项。

  在上面的例子中,一个叫做d b _ t a b l e.sh的脚本将在明天下午3 : 0 0运行。

  还可以使用e c h o命令向at命令提交作业:

  $ echo find/etc -name "passwd" -print | at now +1 minute

  2.2 列出所提交的作业

  一个作业被提交后,可以使用at -l命令来列出所有的作业:

  其中,第一行是作业标识,后面是作业运行的日期/时间。最后一列a代表at。还可以使用at q命令来完成同样的功能,它是at命令的一个链接。当提交一个作业后,它就被拷贝到/v a r/s p o o l/at目录中,准备在要求的时间运行。

  2.3 清除一个作业

  清除作业的命令格式为:

  atrm [job no] 或at -r [job no]

  要清除某个作业,首先要执行at -l命令,以获取相应的作业标识,然后对该作业标识使用at -r 命令,清除该作业。

  有些系统使用at-r [job no]命令清除作业。

  三: &命令

  当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。

  可以使用&命令把作业放到后台执行。

  该命令的一般形式为:

  命令&

   为什么要在后台执行命令?因为当在后台执行命令时,可以继续使用你的终端做其他事情。适合在后台运行的命令有f i n d、费时的打印作业、费时的排序及一些shell脚本。在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。 不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件 中:

  command >out.file 2>&1 &

  在上面的例子中,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。

  当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。

  3.1 向后台提交命令

  现在我们运行一个f i n d命令,查找名为“ s r m.c o n f”的文件,并把所有标准输出和错误输出重定向到一个叫作f i n d.d t的文件中:

  在上面的例子中,在我们成功提交该命令之后,系统给出了它的进程号2 7 0 1 5。

  当该作业完成时,按任意键(一般是回车键)就会出现一个提示:

  这里还有另外一个例子,有一个叫做p s 1的脚本,它能够截断和清除所有的日志文件,我把它放到后台去执行:


  3.2 用ps命令查看进程

  当一个命令在后台执行的时候,可以用提交命令时所得到的进程号来监控它的运行。在前面的例子中,我们可以按照提交p s 1时得到的进程号,用p s命令和g r e p命令列出这个进程:

  如果系统不支持ps x命令,可以用:

  记住,在用p s命令列出进程时,它无法确定该进程是运行在前台还是后台。

  3.3 杀死后台进程

  如果想杀死后台进程可以使用k i l l命令。当一个进程被放到后台运行时, shell会给出一个进程号,我们可以根据这个进程号,用k i l l命令杀死该进程。该命令的基本形式为:

  kill -signal [process_number]

  现在暂且不要考虑其中的各种不同信号;在杀进程的时候,执行下面的命令(你的进程号可能会不同)并按回车键。系统将会给出相应的信息告诉用户进程已经被杀死。

  如果系统没有给出任何信息,告诉你进程已经被杀死,那么不妨等一会儿,也许系统正在杀该进程,如果还没有回应,就再执行另外一个k i l l命令,这次带上一个信号选项:

  如果用上述方法提交了一个后台进程,那么在退出时该进程将会被终止。为了使后台进程能够在退出后继续运行,可以使用nohup命令,下面我们就介绍这一命令。

  3.4 nohup命令

  如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( n o

  hang up)。

  该命令的一般形式为:

  nohup command &

  3.4.1 使用nohup命令提交作业

  如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.o u t的文件中,除非另外指定了输出文件:

  nohup command > myout.file 2>&1

  在上面的例子中,输出被重定向到m y o u t.f i l e文件中。

  让我们来看一个例子,验证一下在退出帐户后相应的作业是否能够继续运行。我们先提交一个名为p s 1的日志清除进程:

  现在退出该shell,再重新登录,然后执行下面的命令:

  我们看到,该脚本还在运行。如果系统不支持ps x命令,使用ps -ef|grep ps1命令。

  3.4.2 一次提交几个作业

  如果希望一次提交几个命令,最好能够把它们写入到一个shell脚本文件中,并用nohup命令来执行它。例如,下面的所有命令都用管道符号连接在一起;我们可以把这些命令存入一个文件,并使该文件可执行。

  现在让它可执行:

  $ chmod 744 quarterend

  我们还将该脚本的所有输出都重定向到一个名为q t r. o u t的文件中。

  3.5 小结

  本文中所讨论的工具主要是有关后台运行作业的。有时我们必须要对大文件进行大量更改,或执行一些复杂的查找,这些工作最好能够在系统负荷较低时执行。

  创建一个定时清理日志文件或完成其他特殊工作的脚本,这样只要提交一次,就可以每天晚上运行,而且无需你干预,只要看看相应的脚本日志就可以了。cron和其他工具可以使系统管理任务变得更轻松。


阅读(819) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~