当希望的待执行的任务命令或脚本运行不影响我们手头上的工作,也就是我们能并行处理任务时,就需要在后台执行命令。接下来,我们看一下,怎样将我们的命令或任务提交到后台执行。
一、&
1、一般形式: 命令 &
2、例子
#example_1
#find / -name "*.conf" > /find_conf 2>&1 &
[1] 27561 --系统给出的后台进程号,可随时kill掉该进程, kill -9 id>
[1]+ Done find / -name "*.conf" --当该作业完成时,按任意键(一般是回车键)就会给出的提示
#example_2
#./sort.sh & --该例表示该脚本在后台执行
3、备注:
3.1、当需要用户交互的命令,切记不要在后台执行,否则后台将一直处于等待状态
3.2、查看进程是否存在:ps -ef | grep 进程ID
3.2、杀掉进程:kill -9 进程ID
二、nohup
1、一般形式:nohup 命令 &
2、例子
# pg-1
# nohup ./a.sh 2>&1 &
3、说明:
3.1、该命令表示当帐号退出之后,继续运行相应的进程
3.2、缺省情况下,该作业的输出将重定向到一个叫nohup.out的文件中
三、at
1、一般形式:
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分别是小时和分钟。还可以使用am或pm
date 日期格式可以是月份数或日期数,而且at命令还能够识别诸如today、tomorrow这样的词。
2、提交作业:
a. at 提交命令
#at 时间
手动输入命令
CTRL+D
# pg-1
# at 14:10
# find / -name "^a" > a.txt 2>&1
CTRL+D
b. at 提交脚本
# at 时间 脚本名
pg-1
at 3:00pm tomorrow -f /opt/a.sh
a.sh脚本将在明天的下午3:00运行
提交的脚本,同时拷贝到/var/spool/atjobs目录下,在执行的时间运行
/var/spool/atjobs # ls
a00002014ece00 a00003014ece1e
3、列出所提交的作业
# at -l
1 2011-09-21 15:00 a root
2 2011-09-22 16:00 a imapuser
第一列:作业标识
第四列:a代 表at
第五列:代表某用户提交的作业
4、清除提交的作业
# atrm job no <no代表作业标识>
# atrm job 1
四、crontab
1、条目的一般形式:
分 时 日 星期几 要运行的命令
如:
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
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
上面的例子表示每周六、周日的1:10运行一个find命令
0,30 18-23 * * * /apps/bin/dbcheck.sh
上面的例子表示在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh
0 23 * * 6 /apps/bin/qtrend.sh
上面的例子表示每星期六的11:00pm运行/apps/bin目录下的qtrend.sh
2、命令的一般形式:
crontab [-u user] [ -e -l -r] file
-u 用户名,如果用户名为登录名,可省略
-e 编辑crontab文件
-l 列出crontab文件中内容
-r 删除crontab文件
3、提交作业
3.1、首先设置环境变量,在根目录的.profile文件中,添加EDITOR=vi;export EDITOR
也就是指定vi作为作业默认的编辑器
3.2、编写作业 vi oraclecron
0,15,30,45 08-18 * * * /bin/find -name "Hedex" -exec rm {} \;
3.3、提交作业
crontab oraclecron
备注:
1、该文件已提交给cron进程,它将每隔15分钟运行一次
2、提交之后,系统同时将作业拷贝到/var/spool/cron中,在指定的时间运行
4、查看已提交作业
crontab -l
5、编辑已提交作业
crontab -e
6、删除作业
crontab -r