文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>shell 编程--ch03 后台执行命令

shell 编程--ch03 后台执行命令

时间:2006-03-29  来源:alphix

ch03 后台执行命令 内容提要:
[*]设置crontab,并提交作业.
[*]设用at命令来提交作业
[*]在后台提交作业
[*]使用nohup命令提交作业
名词解释:
cron  : 系统调度进程.可以使用它在每天的非高峰负荷时间运行作业.
At    : at命令.使用它在一个特定的时间运行一些特殊的作业.
&     : 使用它在后台运行一个占用时间不长的进程
Nohup : 使用它在后台运行一个命令,即使在用户退出时也不受影响
3.1 cron和crontab
    cron是系统主要的调度进程.可以在无需人工干预的情况下运行作业.有一个叫做crontab的
命令允许用户提交,编辑和删除相应的作业.每个用户都可以有一个crontab文件来保存调度信息.
可以使用它运行任意一个shell脚本或某个命令.可以在定制的时间间隔(一周,一天,一小时等)
运行一次.在一个大型的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的
文件.系统管理员是通过cron.deny和cron.allow这两个文件来禁止和允许用户拥有自己的crontab
文件.
3.1.1 crontab的域
    crontab文件的格式:
 第一列: 分钟1~59
 第二列: 小时1~23(0表示子夜)
 第三列: 日1~31
 第四列: 月1~12
 第五列: 星期0~6(0表示星期日)
 第六列: 要运行的命令
   下面是crontab的格式:
 分<>时<>日<>月<>星期<>命令 
 注:<>表示空格
   在这些域中,可以用横杠"-"来表示一个时间范围,例如你希望在周一到周五运行某个作业,那么可以
在星期域使用1-5来表示.
   还可以在这些域中使用逗号",",例如你希望星期一和星期四运行某个作业,可以在星期域使用1,4表
示. 
   可以用星号"*"来表示连续的时间段.如果你希望对某个表示时间的域没有特别的限定,也应该填入*
   该文件所有注释行要在行首用#表示.
3.1.2 crontab条目举例
   #每晚的21:30运行/apps/bin目录下的cleanup.sh
   30 21 * * * /apps/bin/cleanup.sh
   #每月1,10,20日的4:45运行/app/bin目录下的backup.sh
   45 4 1,10,22 * * /apps/bin/backup.sh
   #每周六,周日的1:10运行一个find命令
   10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
   #每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的dbcheck.sh
   0,30 18-23 * * * /apps/bin/dbcheck.sh
3.1.3 crontab 命令选项
   crontab命令的一般形式:
   crontab [-u user] -e -l -r
   参数:
   -u : 用户名
   -e : 编辑crontab文件
   -l : 列出crontab文件中的内容
   -r : 删除crontab文件
   如果使用自己的名字登陆,就不用使用-u选项,因为在执行crontab命令时,该命令能够知道当前用户
3.1.4
  在向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR.编辑$HOME下
的.profile文件,在其中加入一行:
  EDITOR=vi; export EDITOR
  保存并退出.
  创建一个名为<user>cron的文件,其中<user>为用户名,例如:davecrn.在该文件中加入如下内容。
  # (put your own initials here echo the date to the console every
  # 15 minutes between 6pm and 6am
  0,15,30,45 18-06 * * * /bin/echo `date` >/dev/console
  为提交你刚刚创建的crontab文件,可以把这个新创建的文件作为corn命令的参数:
  $ crontab davecron
3.1.5 列出crontab文件
  $ crontab -l
3.1.6 编辑crontab文件
  $ crontab -e
  这里将使用环境变量中制定的文本编辑器对crontab文件进行编辑。
3.1.7 删除crontab文件
  $ crontab -r
3.2 at命令
  at命令允许用户向cron守护进程提交作业,使其在稍后的时间运行。如果你希望在1个月或更长的时间
以后运行,最好还是使用crontab文件。
  和crontab一样,根用户可以通过/etc目录的at.allow和at.deny文件控制那些用户可以使用at命令,那些用户不行。
  at命令的基本形式:
  at [-f script] [-m -l -r] [time] [date]
  参数:
  -f script 是所要提交的脚本或命令。
  -l 列出当前所有等待的作业。atq命令有相同的功能
  -r 清除作业。必须提供相应的作业标识(ID)
  -m 作业完成后给用户发邮件。
  time at命令的时间格式非常灵活;可以是H、HH.HHMM、HH:MM或H:M,其中H和M代表小时和分钟。还可以是a.m.或p.m.
  date 日期格式可以是月份数或日期数,而且at命令还能识别诸如today、tomorrow这样的词。
3.2.1 用at命令提交命令或脚本
  at命令行方式:
  $ at 21:10
  at> find / -name "passwd" -print
  at> <EOT>
  warning: commands will be executed using /bin/sh
  job 1 at 1999-05-05 21:10
  其中:<EOT>就是<ctrl-D>
  向at命令提交一个shell 脚本,使用其命令行方式即可。
  $ at 3.00pm tomorrow -f /apps/bin/db_table.sh
  warning: commands will be executed using /bin/sh
  job 1 at 1999-05-06 15:00
  $ echo find /etc -name "passwd" -print | at now +1 minute 3.2.2 列出所提交的作业
  $ at -l
3.2.3 清除一个作业
  命令格式:atrm [job No.] 或at -r [job No.]
  例如:
  $ atrm job 2
  清除列表中的第二个作业。

3.3 &命令
  可以使用&命令把作业放到后台执行
  命令的一般形式:command &
  注意:需要用户交互的命令不要放在后台执行。
  后台运行的作业同样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的屏幕输出,最好使用下面的命令将它的输出重定向到一个文件中
  command > out.file 2>&1 &
3.3.1 向后台提交命令
  $ find /etc -name "srm.conf" -print >find.dt 2>&1 &
  [1] 27015
  命令提交成功,系统给出它的进程号27015
3.3.2 用ps命令查看进程
  $ ps x|grep 28305
  $ ps ef | grep 28305
  记住:在用ps命令列出进程时,他无法确定进程是在前台还是在后台运行。
3.3.3 杀死后台进程
  使用kill命令:kill -signal [process_number]
3.4 nohup命令
  如果你正在运行一个进程,而且你觉得在退出账户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出账户之后继续运行相应的程序。
  命令:nohup command &
  $ nohup command > myout.file 2>&1
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载