Crontab学习笔记

crond是一个定时任务守护进程,而crontab是用户用来设置定时任务规则的命令

crontab编辑的文件为 /var/spool/cron/crontabs/root

Crontab的基本格式:

用户定时任务规则为6个段,每段通过空格分隔;前五段为时间段,第六段为索要执行的命令段或者脚本任务段。

01 * * * * cmd

1、cmd为所要执行的命令或者脚本,例如/bin/sh /service/scripts/oldgirl.sh

2、每个段之间都必须有一个空格

记忆:分 时 日 月 周

* 号:表示“每”,任意时间都。

-号:减号,表示分隔符,表示一个时间范围,区间段,如17-19点,,每天的17,18,19的00分都执行任务。00 17-19 * * * cmd。表示17,18,19点整点分别执行的意思。

/n:表示每隔“n”个时间单位执行一下任务。例如每隔10分钟执行一次任务可以写成*/10 * * * * cmd

crontab -e编辑会检查语法,建议使用crontab编写

以重启Nginx为例:

回到根目录新建一个存放脚本的目录:

mkdir /server/scripts/ -p

将要定时执行的命令写入到脚本文件:

echo "date +%F" >>nginx.sh

echo "systemctl restart nginx" >>nginx.sh

将脚本文件添加到定时执行任务里(操作系统为Debian):

echo "#restart nginx" >>/var/spool/cron/crontabs/root

echo "00 06 * * * /bin/sh /server/scripts/nginx.sh" >>/var/spool/cron/crontabs/root

查看定时任务的最后两行是否出现我们添加的两行命令:

crontab -l|tail -2

生产环境定时任务的专业写法:

00 09,14 * * 6,0 /bin/sh /server/scripts/oldboy.sh >/dev/null 2>&1

定时任务规则的结尾最好加上">/dev/null 2>&1",如果需要打印日志,则可以追加到指定的日志文件里(此时不要和/dev/null同时存在),尽量不要留空。

如果任务是命令的话,结尾使用“>/dev/null 2>&1”时要多测试下,因为有时候任务规则是无法执行的。

其中 > 表示重定向,/dev/null为特殊的字符设备文件,表示黑洞设备或者空设备。2>&1表示让标准错误和标准输出一样,本命令内容把脚本的正常和错误输出都重定向到/dev/null,既不记录任何的输出。

>或者1>:输出重定向,把前面输出的东西输入到后边的文件中,会删除文件原有的内容

>>或者1>>:追加重定向,把前面输出的东西输入到后边的文件中,不会删除文件原有的内容

2>:错误重定向:把错误信息输入到后边的文件中,会删除文件原有的内容

2>>:错误追加重定向:把错误信息追加到后边的文件中,不会删除原有的文件内容

>/dev/null 2>&1 等价于 2>/dev/null 1>/dev/null 等价于 &>/dev/null

执行命令:

echo 1 1>>a.log 2>>b.log

等价于:

echo 1 >>a.log 2>&1

检查a.log会发现里边有数字1,因为是正常执行的所以会输入到a.log里面,如果执行错误的话就会输入数字1到b.log里面。

如果定时任务规则结尾不加>/dev/null 2>&1 等命令配置,有可能有大量输出信息,时间长了,可能由于系统未开启邮件服务而导致邮件临时目录/var/spool/clientmqueue 文件数猛增的隐患发生,大量文件会占用大量的磁盘inode节点,导致磁盘inode 满而无法正常写入数据。centos6.4默认不安装sendmail,可能不会导致这个问题发生,但Centos5会默认安装sendmail,因此有可能会导致这个问题发生。

超过两行的命令执行,最好使用脚本 !!!

定时任务的日志位置:

/var/log/cron

版权声明:
作者:admin
链接:https://www.shennong.date/?p=735
来源:北冥有鱼
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>