Linux学习笔记3 后台执行命令

Linux学习笔记3 后台执行命令 • 设置crontab文件,并用它来提交作业。
• 使用at命令来提交作业。
• 在后台提交作业。
• 使用nohup命令提交作业。

cron: 系统组要的调度进程,无需人工干预的情况下执行作业,用户在crontab中提交编辑相应的作业。 每一个用户都可以保存一个crontab文件来保存调度信息系统管理员可以通过cron.deny和cron.allow来禁止或允许用户拥有自己的crontab文件
crontab脚本格式为:
分 时 日 月 星期 要运行的命令
在每一个域中我们可以使用- , * 这些标示符
-表示一个区间段,如希望周一到周五运行: 分 时 日 月 1-5 命令
,则是列举,如希望周一和周五运行: 分 时 日 月 1,5 命令

  • 则是没有限制 如希望不限制是周几: 分 时 日 月 * 命令

注: crontab运行时并不知道用户的运行环境, 所以用户在提交crontab任务时需要给出脚本的绝对路径以及相应的环境变量

crontab命令的形式:
crontab [-u user] -e -l -r
-u 用户名
-e 编辑
-l 列出
-r 删除
使用当前用户登录则不需要-u 选项

创建:
向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$HOME目录下的.profile文件,在其中加入这样
一行:
EDITOR=vi; export EDITOR
然后保存并退出。
不妨创建一个名为cron的文件,其中是用户名,例如,davecron。在该文件中加入如下的内容。 0,15,45 16-08 * * * /bin/echo 'date' > /dev/console 保存并退出。确信前面5个域用空格分隔。 在上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用tty1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。 为了提交你刚刚创建的向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量文件,可以把这个新创建的文件作为cron命令的参数: $ crontab davecron 现在该文件已经提交给cron进程,它将每隔15分钟运行一次。同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即,dave)

备份:crontab -l > /$HOME/mycron at命令: at命令允许用户向cron守护进程提交作业,使其在稍后的时间运行。这里稍后的时间可能是指10 min以后,也可能是指几天以后。如果你希望在一个月或更长的时间以后运行,最好还是使用crontab文件。 一旦一个作业被提交,at命令将会保留所有当前的环境变量,包括路径,不象crontab只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户,除非你对其输出进行了重定向,绝大多数情况下是重定向到某个文件中。 和crontab一样,根用户可以通过/etc目录下的at.allow和at.deny文件来控制哪些用户可以 使用at命令,哪些用户不行。不过一般来说,对a t命令的使用不如对cron tab的使用限制那么严格。 a t命令的基本形式为: 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这样的词。

&命令 当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端。可以使用&命令把作业放到后台执行。 该命令的一般形式为: 命令& 不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中: command >out.file 2>&1 & 在上面的例子中,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。 当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。 如: 运行一个find命令,查找名为“srm.conf”的文件,并把所有标准输出和错误输 出重定向到一个叫作find.dt的文件中: find /etc -name “srm.conf” -print >find.dt 2>&1 &

nohup命令
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。Nohup就是不挂起的意思(no hang up)。 该命令的一般形式为:
nohup command &
使用nohup命令提交作业,在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1
在上面的例子中,输出被重定向到myout.file文件中。