后台执行命令
点击此处打开《Linux与Unix Shell编程指南》本章pdf文档
需要说明补充的地方:
a、 在crontab的内容中使用绝对路径;
b、 默认情况下使用"crontab -e"命令时使用 vi编辑器,但也可以手动设定。由于我在redhat enterprise 5系
统下,所以编辑$HOME目录下的.bash_profile而非pdf文档上的.profile文件。查找该文件的命令为:
find ~ -name ".bash_profile",编辑它的命令为:vi .bash_profile,然后添加:
EDITOR=vi; export EDITOR;
c、 创建一个名为<user>cron的文件,其中<user>为用户名,如,rootcron,在里面添加crontab内容,然后保存;
d、 提交,命令为:crontab rootcron;
e、 如果要修改rootcron内容,可以采用两种方法:
1、 用gedit打开rootcron并修改保存,然后用命令"crontab rootcron"重新提交,则rootcron内容更新;
2、 直接用命令"crontab -e"然后修改保存然后用命令"crontab -l",可以看到内容已经更新;
两种方法的区别:
1方法修改rootcron源文件;而2方法没有修改rootcron源文件,可以用gedit打开rootcron查看,可以发现内
容还是跟上一次用gedit来修改rootcron的内容,而不是用"crontab -e"来修改后的内容。
f、 默认情况下,在crontab内容中运行命令的运行结果情况将被发送到/var/spool/mail/(当前用户名的文件)内
容中,如crontab内容中使用find命令的时候没有找到的反馈信息都会发送到mail内容中,
1 11 * * * echo "Hello!"
“Hello“字符串将被发送到mail内容中,不过也可以重定向到其他文件,如:
1 11 * * * echo "Hello!" > rc.txt
其中rc.txt被创建到当前目录下。
正文:
crontab命令
cron是系统主要的调度进程,可以在无需人公干预的情况下运行作业。有一个叫做crontab的命令允许用户提交、编
辑或删除相应的作业。每一个用户都可以有一个crontab文件来把保存调度信息。可以使用它运行任意一个shell脚本或命
令。系统管理员通过cron.deny和cron.allow这两个文件来禁止或允许用户拥有自己的crontab文件。
crontab内容的格式(6部分组成)
分<>时<>日<>月<>星期<>要运行的命令
注意<>表示空格,各部分范围为:
分 1~59
时 1~23(0表示子夜)
日 1~31
月 1~12
星期 0~6(0表示星期天)
注意:可以用横杠-表示一个时间范围,如你希望星期一至星期五运行,则在星期域使用1-5表示;可以用逗号",",如你
希望星期一和星期四运行这个作业,使用1,4表示;可以使用*表示连续的时间段。如果你对某个表示时间的域没有限定,用
*来表示。
上面是crontab内容的格式,下面的是crontab命令的格式:
crontab [ -u user ] -e -l -r
-u 用户名
-e 编辑crontab文件
-l 列出crontab文件中的内容
-r 删除crontab文件。
注意:如果使用自己的名字登录,就不用使用-u选项,因为在执行crontab命令时,该命令能够知道当前的用户。
步骤:
1、创建crontab文件
方法1:新建文件名为rootcron(可自定)的文件,然后用gedit打开并编辑crontab内容并保存;
方法2:用crontab -e命令。我的系统的redhat enterprise 5,默认打开为vi编辑器,可以通过手动设置为vi编
辑器:在$HOME目录的.bash_profile(其他系统可能为.profile)文件,加入“EDITOR=vi; export EDITOR“,然
后保存退出。
2、提交crontab文件
命令:crontab rootcron
同时,在/var/spool/cron目录中保存该文件的副本,到那时这个副本的文件名为用户名。
3、提交以后可以查看当前的crontab内容,命令:crontab -l。可以做个备份,命令:crontab -l > $HOME/
mycron。
4、删除crontab文件内容,命令:crontab -r。然后保留在/var/spool/cron目录中的副本被删除。所以,不要
把源文件放在/var/spool/cron/目录下,以免执行删除命令的时候把源文件删除。可以在$HOME目录下放源文件,当执行
删除命令后如果要重新提交,可以在$HOME目录下执行:crontab rootcron就可以了。
at命令
at命令允许用户向cron守护进程提交作业,使其在稍后的时间运行。这里稍后的时间可能是指 10min以后,也可能是
指几天以后。如果你希望在一个月或更长的时间以后运行,最好还是使用 crontab文件。
用at命令提交的作业的所有输出将以电子邮件的形式发送给用户,除非重定向。根用户可以通过/etc目录下的
at.allow和at.deny文件来控制哪些用户可以使用at命令,哪些不可以。
at命令格式:
at [ -f script ] [ -m -l -r ] [ time ] [ date ]
-f script 所要提交的脚本或命令
-l 列出当前所有等待运行的作业
-r 清楚作业,要提供相应的作业标识(ID)
-m 作业完成给用户发邮件
time 时间,格式灵活。
date 日期,格式灵活。
步骤:
使用at命令提交命令或脚本
两种方法:
a、使用命令提示符,如:
[root@localhost test]# at 10:57
at> ls -l > atlist
at> <EOT>
job 6 at 2011-02-19 10:57
<EOF>表示<CTRL -D>
b、使用命令行方式,可以通过提交脚本完成,如:
[root@localhost test]# at 18:30 today -f ./at_test.sh
job 7 at 2011-02-19 18:30
列出所提交的作业
用命令:at -l,得到:
[root@localhost test]# at -l
7 2011-02-19 18:30 a root
其中,7为该作业的标识,后面是作业运行的日期/时间。最后一列a代表at。
清除一个作业:
两种方法:
a、at -r [ job no ]
例如:
[root@localhost test]# at 18:35 today -f ./at_test.sh
job 8 at 2011-02-19 18:35
[root@localhost test]# at -l
8 2011-02-19 18:35 a root
[root@localhost test]# at -r job 8
[root@localhost test]# at -l
b、atrm [ job no ]
例如:
[root@localhost test]# at 18:38 today -f ./at_test.sh
job 10 at 2011-02-19 18:38
[root@localhost test]# at -l
10 2011-02-19 18:38 a root
[root@localhost test]# atrm job 10
[root@localhost test]# at -l
&命令
当在前台运行某个作业时,终端被该作业占据;而在后台运行作业时,它不会占据终端,可以使用&命令把作业放在后
台执行。
格式为:
命令 &
不过作业在后台执行的结果也会输出到屏幕上,干扰你的工作,所以可以通过重定向解决,如:
[root@localhost test]#find . -name "at_test" -print >find.dt 2>&1 &
[1] 5303
其中[1] 5303为进程号。
注意:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。
当上面的作业完成时,按回车键就会出现一个提示表示完成:
[root@localhost test]#
[1]+ Done find . -name "at_test" -print >find.dt 2>&1
可以通过命令“ps x“或者“ps -ef“来查看进程。并用kill命令杀死进程,不过前提是知道该进程的进程号。如:
kill 5303
nohup命令
作用:如果你正在运行一个进程,而且觉得在退出帐户之前不会结束,那么使用nohup命令使其在退出帐户后继续运行
。格式为:
nohup command &
如何验证呢?
方法:先用nohup提交一个进程,然后退出帐户重新登录,然后在用ps命令查看进程,看是否还在。