全部博文(2065)
分类:
2009-12-24 14:42:45
Shell学习专题之后台执行命令
[整理人:hkebao@126.com 整理时间:
本专题讨论内容如下:
1、
设置crontab文件,并用它提交作业
2、
使用at命令提交作业
3、
在后台提交作业
4、
使用nohup命令提交作业
3.1 cron与crontab
了解contab文件每个条目中各个域的意义和格式。
下面就是这些域:
第1列 分钟1~59
第2列 小时1~23
第3列 日1~31
第4列 月1~12
第5列 星期0~6
第6列 要运行的命令
下面是crontab的格式:
分<>小时<>日<>星期<>要运行的命令
其中<>表示空格
在这些域中可以用横杠 – 来表示一个时间范围。例如希望星期一到星期五可以在星期一列1-5
还可以使用逗号”,” 例如你希望星期一和星期四运行某个作业可以用 1,4
还可以使用星号”*” 表示连续的时间段。如果你对某个时间的域没有特别的限定也应该在该域填入*。
该文件的每一个条目必须含有五个时间域,而且每个域之间要用空格分隔。
注释是用:#来表示
示例:打开crontab –e 就可以写这些条目了!
Ex1. 表示每晚21:30 运行这个脚本
30 21 * * * /apps/bin/cleanup.sh
Ex2. 下面表示每月1、10、22 日的4:45 运行脚本
45 4
1,10,22 * * /apps/bin/backup.sh
记得:当使用这些命令的时候一定要提交绝对路径,就是要在shell脚本里面提供必要的路径与环境变量。除了自动的全局变量(shell里面是有全局变量)
命令的一般形式为:
Crontab [-u user] –e –l –r
其中:
-u 用户名
-e 编辑crontab文件
-l 列出crontab文件中内容
-r 删除crontab文件
PS:你需要编辑$HOME目录下的.profile文件,在其中添加这样的一行
EDITOR=vi; export EDITOR 保存退出 这样就能够使用VI编辑器了!
3.2 at命令
允许用户向 cron守护进程提交作业,使其在稍后的时间运行。这里面的稍后时间可能是指10分钟以后,也可能是几天以后。如果你希望一个月或更长的时间以后运行最好还是用crontab文件。
根用户可以通过/etc 目录下的 at.allow和at.deny文件来控制哪些用户可以使用at命令哪些用户不能使用。
At基本形式为:
At [-f
script] [-m –l -r] [time] [date]
其中:
-f script 是所要提交的脚本或命令
-l 列出当前所有等待运行的作业。
-r 清除作业。为了清除作业就要提供相应的作业标识ID
-m 作业完成后给用户发邮件
Time
at命令的时间格式非常灵活 可以是H
hh.hhmm hh:mm 或h:m
Date 日期格式可以是月份或日期数。而且at 命令还能够识别诸如today tomorror这样的词
3.3 &命令
当在前台运行某个作业时,终端被该作业占据。而在后台不会占据终端。
能够使用&命令将作业放在后台执行。这个命令的一般形式为: 命令&
适合在后台做的事如:find、一些shell脚本!
提交这个作业之后就会有一个进程号能够直接kill掉这个进程号就能够监控这个进程了!
示例:
[root@slave2 etc]# find /etc -name
"*.cnf" -print > find.dt 2>&1 &
[10] 24718 出来这个进程号ID值
然后输入任意键就会出来一个提示:
[10]
Done find /etc
-name "*.cnf" -print >find.dt 2>&1
表示完成了这个命令了!
这个会启来一个后台进程。所以可以通过一些命令查看进程
ps x|grep 24718 能够获取一个进程号出来的!
杀死后台进程
命令形式:kill –signal
[process_number]
3.4 nohup命令
这个命令能够在你退出账户之后继续运行相应的进程。Nohup就是不挂起的意思。其形式为:
Nohup command
&
总结:创建一个定时清理日志文件或完成其他特殊工作的脚本,这样只要提交一次就可以每天晚上运行,而且无需干预,只需要查看相应的脚本日志就可以了。让系统管理工作更加容易