计划命令:crontab,at,&
前台进程:job,fg,bg,nohup
14.1.crontab
功能:类似于windows计划任务的一个命令,功能非常强大
语法:crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
常用选项:
-u:用户名,只有root用户才能进行任务,创建、修改、删除
-e:编辑crontab文件
-l:查看crontab文件内容
-r:删除crontab文件
crontab的域
下面就是这些域:
第1列分钟1~5 9
第2列小时1~2 3(0表示子夜)
第3列日1~3 1
第4列月1~1 2
第5列星期0~6(0表示星期天)
第6列要运行的命令
下面是c r o n t a b的格式:
分< >时< >日< >月< >星期< >要运行的命令
其中< >表示空格。
示例:
30 21* * * /apps/bin/cleanup.sh 说明:表示每晚的2 1 : 3 0运行/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 : 1 0运行一个find命令 0,30 18-23 * * * /apps/bin/dbcheck.sh 说明:表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/apps/bin/dbcheck.sh 0 23 * * 6 /apps/bin/qtrend.sh 说明:表示每星期六的23点运行 /apps/bin/qtrend.sh
14.2.at
功能:crontab实现的是定时执行任务,特定任务运行一次,就需要用到at
语法:at [-f script] [-m -l -r] [time] [date]
常用选项:
-f:script 是所要提交的脚本或命令。
-l:列出当前所有等待运行的任务。a t q命令具有相同的作用。
-r:清除任务。为了清除某个任务,还要提供相应的任务标识( I D);有些U N I X变体只接受a t r m作为清除命令。
-m:任务完成后给用户发邮件。
time:at命令的时间格式非常灵活;可以是H、H H . H H M M、H H : M M或H : M,其中H和M分别是小时和分钟。还可以使用a . m .或p . m .。
date:日期格式可以是月份数或日期数,而且a t命令还能够识别诸如t o d a y、t o m o r r o w这样的词。
示例:
1、提示符方式
# su sam $ at 10:40 warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh at> find /etc -name "passwd" -print at> <EOT> job 1 at 2004-11-02 10:40 说明:< E O T >就是< C T R L - D >。在10:40系统将执行一个简单的f i n d命令。提交的任务被分配了一个唯一标识job 1。该命令在完成以后会将全部结果以邮件的形式发送给我。 下面这些日期/时间格式都是a t命令可以接受的: at 5.00am May23 at 11.20pm at now +2 hour at 9am tomorrow at 15:00 May24 at now + 10 minutes
2、命令行方式
如果希望向a t命令提交一个s h e l l脚本,使用其命令行方式即可。在提交脚本时使用- f选项。
如:
$ touch db_table.sh $ at 3:00pm tomorrow -f db_table.sh warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh job 3 at 2004-11-02 15:00 d b _ t a b l e . s h的脚本将在2004-11-02 15:00运行
3、还可以使用e c h o命令向a t命令提交任务
$ echo find /etc -name "passwd" -print | at now +1 minute
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
job 4 at 2004-11-01 19:07
列出所提交的任务
一个任务被提交后,可以使用at -l命令来列出所有的任务:
$ at -l
1 2004-11-02 10:40 a sam
3 2004-11-02 15:00 a sam
4 2004-11-01 19:07 a sam
其中,第一行是任务标识,后面是任务运行的日期/时间。最后一列a代表a t。
还可以使用a t q命令来完成同样的功能,它是a t命令的一个链接。
直接>atq,相当于>at -l
当提交一个任务后,它就被拷贝到/ v a r / s p o o l / a t目录中,准备在要求的时间运行。
# pwd
/var/spool/at
# ls -l
清除一个任务
清除任务的命令格式为:
atrm [job no] 或at -r [job no]
要清除某个任务,首先要执行at -l命令,以获取相应的任务标识,然后对该任务标识使用at -r 命令,清除该任务。
$ at -l
1 2004-11-02 10:40 a sam
3 2004-11-02 15:00 a sam
4 2004-11-01 19:07 a sam
$at -r 3
$at -l
1 2004-11-02 10:40 a sam
4 2004-11-01 19:07 a sam
有些系统使用at-r [job no]命令清除任务。
14.3.&
功能:放入后台执行
示例:
查找名为“httpd.conf”的文件,并把所有标准输出和错误输出重定向到f i n d . d t的文件中:
# find /etc/httpd/ -name "httpd.conf" -print >find.dt 2>&1 &
[2] 7832
[1] Done find /etc/ -name "httpd.conf" -print >find.dt 2>&1 &
成功提交该命令之后,系统给出了它的进程号7832。
14.4.nohup命令
功能:把当前命令行运行的进程放到后台,以至于退出窗口进程不会退出。
语法: nohup command &
示例:
14.5.
功能:
A,Shell支持作用控制,有以下命令:
1. command& 让进程在后台运行
2. jobs 查看后台运行的进程
3. fg %n 让后台运行的进程n到前台来
4. bg %n 让进程n到后台去;
PS:"n"为jobs查看到的进程编号.
总结:
fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的
一。& 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行
二。ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
三。jobs
查看当前有多少在后台运行的命令
四。fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
#Linux下使用Shell命令控制任务Jobs执行
下列命令可以用来操纵进程任务:
ps 列出系统中正在运行的进程;
kill 发送信号给一个或多个进程(经常用来杀死一个进程);
jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息;如果报告了一个任务的终止(即任务的状态被标记为Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;
bg 将进程搬到后台运行(Background);
fg 将进程搬到前台运行(Foreground);
11.35 nohup
功能:运行命令,忽略所有挂起信号
常用选项:
示例:
后台运行程序,终端关闭不影响:
# nohup bash test.sh &>test.log &