Chinaunix首页 | 论坛 | 博客
  • 博客访问: 381515
  • 博文数量: 114
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1219
  • 用 户 组: 普通用户
  • 注册时间: 2015-02-07 21:23
文章分类

全部博文(114)

文章存档

2018年(1)

2017年(5)

2016年(87)

2015年(21)

我的朋友

分类: 系统运维

2016-03-22 11:00:42


  1. 名词解释:
  2. cron 系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月
  3. 中的不同时段运行。
  4. At at命令。使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时
  5. 间段或高峰负荷时间段运行。
  6. & 使用它在后台运行一个占用时间不长的进程。
  7. Nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响。
  1. cron和crontab
  2. cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。有一个叫做
  3. crontab的命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件
  4. 来保存调度信息。可以使用它运行任意一个 s h e l l脚本或某个命令,每小时运行一次,或一周
  5. 三次,这完全取决于你。每一个用户都可以有自己的 crontab文件,但在一个较大的系统中,
  6. 系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过
  7. cron.deny和cron.allow这两个文件来禁止或允许用户拥有自己的crontab文件。
  8. 3.1.1 crontab的域
  9. 为了能够在特定的时间运行作业,需要了解crontab文件每个条目中各个域的意义和格式。
  10. 下面就是这些域:
  11. 第1列 分钟1~5 9
  12. 第2列 小时1~2 3(0表示子夜)
  13. 第3列 日1~3 1
  14. 第4列 月1~1 2
  15. 第5列 星期0~6(0表示星期天)
  16. 第6列 要运行的命令
  17. 下面是crontab的格式:
  18. < >< >< >< >星期< >要运行的命令
  19. 其中< >表示空格。
  20. crontab文件的一个条目是从左边读起的,第一列是分,最后一列是要运行的命令,它位于星期的后面。
  21. 在这些域中,可以用横杠 -来表示一个时间范围,例如你希望星期一至星期五运行某个作
  22. 业,那么可以在星期域使用 1 - 5来表示。还可以在这些域中使用逗号“,” ,例如你希望星期一
  23. 和星期四运行某个作业,只需要使用 1 , 4来表示。可以用星号 *来表示连续的时间段。如果你
  24. 对某个表示时间的域没有特别的限定,也应该在该域填入 *。该文件的每一个条目必须含有 5
  25. 个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用 #来表示。
  26. 3.1.2 crontab条目举例

  27. 这里有crontab文件条目的一些例子:
  28. 30 21* * * /apps/bin/cleanup.sh
  29. 上面的例子表示每晚的2 1 : 3 0运行/apps/bin目录下的cleanup.sh。

  30. 45 4 1,10,22 * * /apps/bin/backup.sh
  31. 上面的例子表示每月1、1 0、2 2日的4 : 4 5运行/apps/bin目录下的backup.sh。

  32. 10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
  33. 上面的例子表示每周六、周日的1 : 1 0运行一个find命令。

  34. 0,30 18-23 * * * /apps/bin/dbcheck.sh
  35. 上面的例子表示在每天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/apps/bin目录下的dbcheck.sh。

  36. 0 23 * * 6 /apps/bin/qtrend.sh
  37. 上面的例子表示每星期六的11:00 运行/apps/bin目录下的qtrend.sh。

 在每个月的第一天凌晨4点42分运行/etc/cron.monthly目录中的每个脚本文件 
42 4 1 * * root run-parts /etc/cron.monthly


  1. 你可能已经注意到上面的例子中,每个命令都给出了绝对路径。当使用 crontab运行shell
  2. 脚本时,要由用户来给出脚本的绝对路径,设置相应的环境变量。记住,既然是用户向 cron
  3. 提交了这些作业,就要向cron提供所需的全部环境。不要假定 cron知道所需要的特殊环境,它
  4. 其实并不知道。所以你要保证在shell脚本中提供所有必要的路径和环境变量,除了一些自动

  5. 置的全局变量。
  6. 如果cron不能运行相应的脚本,用户将会收到一个邮件说明其中的原因。
  7. 3.1.3 crontab命令选项
  8. crontab命令的一般形式为:
  9. Crontab [-u user] -e -l -r
  10. 其中:
  11. -u 用户名。
  12. -e 编辑crontab文件。
  13. -l 列出crontab文件中的内容。
  14. -r 删除crontab文件。
  15. 如果使用自己的名字登录,就不用使用 - u选项,因为在执行 crontab命令时,该命令能够知道当前的用户
  1. shell中或者cron中可能经常能看到:>/dev/null 2>&1
  2. 分解这个组合:“>/dev/null 2>&1” 为五部分。

  3. 1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt
  4. 2:/dev/null 代表空设备文件
  5. 3:2> 表示stderr标准错误
  6. 4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
  7. 5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"
  8. 因此,>/dev/null 2>&1
  9. 也可以写成“1> /dev/null 2> &1”

  10. 那么本文标题的语句执行过程为:
  11. 1>/dev/null :首先表示标准输出重定到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
  12. 2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
  13.  &> /dev/null 等价于 >/dev/null 2>&1

  14. 最常用的方式有:
  15.     
  16. command > file 2>file   与   command > file 2>&1

  17. 它们有什么不同的地方吗?
  18.       首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。
  19.       而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
  20.       从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command > file 2>&1 这样的写法。


阅读(1114) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~