免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1099 | 回复: 0
打印 上一主题 下一主题

Linux后台执行命令(2) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-26 11:03 |只看该作者 |倒序浏览

            
          
  -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命令提示符,这时只需逐条输入相应的命令,然后按‘ ’退出。下面给出一个例子:
  其中, 就是。在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和其他工具可以使系统管理任务变得更轻松。
         
         
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34831/showart_483848.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP