Shell编程学习---第三篇:后台执行命令

为了使这些进程能够在后台运行,也就是说不在终端屏幕上
运行,有几种选择方法可供使用。
在本章中我们将讨论:
•  设置 crontab文件,并用它来提交作业。
•  使用at命令来提交作业。
•  在后台提交作业。
•  使用nohup命令提交作业。
名词解释:
cron  系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月
中的不同时段运行。
At at 命令。使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时
间段或高峰负荷时间段运行。
&  使用它在后台运行一个占用时间不长的进程。
Nohup  使用它在后台运行一个命令,即使在用户退出时也不受影响。

3.1 cron 和crontab
cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。有一个叫做
crontab的命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件
来保存调度信息。可以使用它运行任意一个 shell脚本或某个命令,每小时运行一次,或一周
三次,这完全取决于你。每一个用户都可以有自己的crontab文件,但在一个较大的系统中,
系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过
cron.deny和cron.allow这两个文件来禁止或允许用户拥有自己的crontab文件


3.2 at命令
at命令允许用户向cron守护进程提交作业,使其在稍后的时间运行。这里稍后的时间可能
是指10min以后,也可能是指几天以后。如果你希望在一个月或更长的时间以后运行,最好还
是使用crontab文件。
一旦一个作业被提交, a t命令将会保留所有当前的环境变量,包括路径,不象 crontab,
只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户,除非你对其输出
进行了重定向,绝大多数情况下是重定向到某个文件中。
和crontab一样,根用户可以通过/etc目录下的 at.allow和at.deny文件来控制哪些用户可以
使用at命令,哪些用户不行。不过一般来说,对at命令的使用不如对 crontab的使用限制那么
严格。
a t命令的基本形式为:
at [-f script] [-m -l -r] [time] [date]
其中,
-f script  是所要提交的脚本或命令。
-l  列出当前所有等待运行的作业。 a t q命令具有相同的作用。
-r  清除作业。为了清除某个作业,还要提供相应的作业标识(ID);有些 UNIX变体只
接受atrm作为清除命令。
-m  作业完成后给用户发邮件。
time at 命令的时间格式非常灵活;可以是 H、HH.HHMM、HH:MM或H:M,
其中H和M分别是小时和分钟。还可以使用a.m或p.m
date  日期格式可以是月份数或日期数,而且at命令还能够识别诸如today/tomorrow这样
的词。

3.3 & 命令
当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端
可以使用&命令把作业放到后台执行。
该命令的一般形式为:
命令 &
为什么要在后台执行命令?因为当在后台执行命令时,可以继续使用你的终端做其他事
情。适合在后台运行的命令有find、费时的打印作业、费时的排序及一些shell脚本。在后台运
行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻
等。
不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行
的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
command >out.file 2>&1 &
在上面的例子中,所有的标准输出和错误输出都将被重定向到一个叫做out.file的文件中。
当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它

3.4 nohup 命令
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用
nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。Nohup就是不挂起的意思
( no hang up)。
该命令的一般形式为:
nohup command &


你可能感兴趣的:(Shell编程学习---第三篇:后台执行命令)