Linux 后台执行命令
###摘要:### 当你在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,你可能希望它能够在 每天的非负荷高峰时间段运行。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。
为了使进程能在后台运行, Linux提供以下几种方式:
设置crontab文件,并用它来提交作业
使用at命令来提交作业
在后台提交作业
使用nohup命令提交作业
cron :系统调度进程
at : at命令
& :使用它在后台运行一个占用时间不长的进程
Nohup :使用它在后台运行一个命令,即使在用户退出时也不受影响
cron/crontab
crontab 的域
第1列 | 分钟0~59 |
第2列 | 小时0~23 |
第3列 | 日1~31 |
第4列 | 月1~12 |
第5列 | 星期0~6(0为星期天) |
第6列 | 要运行的命令 |
crontab的格式: 分<>时<>日<>月<>星期<>要运行的命令(其中<>表示空格)。
在这些域中可以使用以下几种特殊符号
“-” 表示一个时间范围
“,” 表示时间选项
“*” 表示连续时间段,如果对某个表示时间的域没有特别的限定,也应该在该域填入 *
每一个条目必须包含5个时间域,且每个时间域之间用空格分开,文中注释早行首用 #
30 21* * * /apps/bin/cleanup.sh | 表示每晚的21:30运行/apps/bin目录下的cleanup.sh |
45 4 1,10,22 * * /apps/bin/backup.sh | 表示每月 1、10、22日的4:45运行/apps/bin目录下的backup.sh |
0 23 * * 6 /apps/bin/qtrend.sh | 表示每星期六的11:00pm运行/apps/bin目录下的qtrend.sh |
crontab命令选项
usage: crontab [-u user] -e -l -r
-u 用户名。
-e 编辑c r o n t a b文件。
-l 列出c r o n t a b文件中的内容。
-r 删除c r o n t a b文件。
at命令
usage: 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这样的词
&命令
使用&命令把作业放到后台执行
usage: 命令 &
需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。
向后台提交命令:
$ find /etc -name "srm.conf" -print > find.dt 2>&1 &
$ ps1 &
nohup命令
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。 Nohup就是不挂起的意思 (nohang up)。
usage: nohup command &
使用nohup命令提交作业:
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1
一次提交几个作业:
如果希望一次提交几个命令,最好能够把它们写入到一个shell脚本文件中,并用nohup命令来执行它。例如,下面的所有命令都用管道符号连接在一起;我们可以把这些命令存入一个文件,并使该文件可执行。
$ chmod 744 filename
$ nohup path/filenam > myout.file 2>&1
小结
本章中所讨论的工具主要是有关后台运行作业的。有时我们必须要对大文件进行大量更改,或执行一些复杂的查找,这些工作最好能够在系统负荷较低时执行。创建一个定时清理日志文件或完成其他特殊工作的脚本,这样只要提交一次,就可以每天晚上运行,而且无需你干预,只要看看相应的脚本日志就可以了。 Cron和其他工具可以使系统管理任务变得更轻松。