crontab命令

crontab命令

一、说明

Linux crontab是用来定期执行程序的命令,当安装完成操作系统之后,默认便会启动此任务调度命令。

二、语法

crontab [ -u user ] file

crontab [ -u user ] { -l | -r | -e }

-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

格式:
* * * * *   command

minute hour day month week command
注释:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:   表示小时,可以是从0到23之间的任何整数。
day:    表示日期,可以是从1到31之间的任何整数。
month:  表示月份,可以是从1到12之间的任何整数。
week:   表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:表示要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

三、参数说明

crontab -e : 执行文字编辑器来设定时程表,crontab默认编辑器为nano,修改crontab默认编辑器为vi或者其他的编辑器,可以用以下命令:

$ select-editor

$ export EDITOR=vim 

crontab -r : 删除目前的时程表

crontab -l : 列出目前的时程表

crontab file [-u user]-用指定的文件替代目前的crontab。

示例:查看root用户当前时程表

sudo crontab -u root -l

编辑当前用户时程表

crontab -e

四、常用实例

minute hour day month week command

  1. 每分钟执行一次URL
*/1 * * * * /usr/bin/curl https://ww.baidu.com
  1. 每两个小时重启一次nginx
0 */2 * * * /usr/sbin/nginx nginx restart
  1. 每天8:30执行一次命令
30 8 * * * /usr/bin/php7.2 /data/webapps/test.php >/dev/null 2>&1
  1. 每月1号和15号执行一次命令
0 0 1,15 * * /usr/bin/php7.2 /data/webapps/test.php >/dev/null 2>&1
  1. 每月的1、11、21、31日是的6:30执行一次ls命令
30 6 */10 * * ls

30 6 1,11,21,31 * * ls
  1. 周一到周五每天下午 5:00执行一次ls命令
0 17 * * 1-5 ls
  1. 在11月内,每天的8点到18点,每隔2个小时0分钟执行一次ls命令
0 8-18/2 * 11 * ls
  1. 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分…执行 echo “haha”
20 0-23/2 * * *  echo "haha"
  1. 上面的例子:表示每周六、周日的1 : 30重启nginx
30 1 * * 6,0 /usr/sbin/nginx nginx restart
  
  • 执行的脚本中不能有相对路径,要用绝对路径。

五、其它

1.大部分在crontab计划任务中都会年到未尾带 >/dev/null 2>&1,是什么意思呢?
  1. > 是重定向
  2. /dev/null代表空设备文件
  3. 0 是标准输入
  4. 1 表示stdout标准输出,系统默认值是1,所以 “>/dev/null” 等同于 “1>/dev/null”
  5. 2 表示stderr标准错误
  6. & 表示等同于的意思

2>&1,表示2的输出重定向等同于1
整句的意思就是标准输出重定向到空设备文件,也就是不输出任何信息到终端,标准错误输出fd2重定向等同于标准输出fd1,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件

2.command > file 2>file 与 command > file 2>&1 有什么区别呢?

command >file 2>file:将命令所产生的标准输出信息,和错误的输出信息送到file中
command > file 2>file 这样的写法,stdout和stderr都直接送到file中,file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当标准输出和错误输出会抢占往out文件的管道,所以可能会导致输出内容的时候出现缺失、覆盖等情况。不管怎么说,采用这种写法,最后的情况是无法预估的。
而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会用command > file 2>&1 这样的写法.

  • 注意>/dev/null 2>&12>&1 >/dev/null是不一样的,顺序不能反
命令标准输出错误输出
>/dev/null 2>&1丢弃丢弃
2>&1 >/dev/null丢弃屏幕
3./dev/null 2>&12>&1 >/dev/null不一样的原因

fd0,fd1,fd2指向的文件默认情况下分别是/dev/stdin、/dev/stdout和/dev/stderr,这才是真正的标准输入,标准输出,错误输出,如果将数据写入到/dev/stdout中,就会在屏幕上显示数据,fd0,fd1,fd2只是标志而已,真正起作用的是他们对应的文件指针。
所以重定向命令’>’所做的工作就是就是改变了fd所对应的文件指针!

>/dev/null 2>&1
//1. 首先将fd1的文件指针更改为指向/dev/null
//2. 然后将fd2的文件指针更改为fd1所对应的文件指针,也就是/dev/null文件
2>&1 >/dev/null
//1. 首先将fd2的文件指针更改为fd1所对应的文件指针,也就是STDOUT文件
//2. 然后将fd1的文件指针更改为指向/dev/null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值