Crontab定时任务

Crontab定时任务

tone 2977 2023-02-10

Crontab介绍:Linux crontab是用来crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρ?νο?),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。当安装完成操作系统之后,默认便会启动此任务调度命令。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。

1.使用yum命令安装Crontab:

yum install vixie-cron #有些情况下无法下载但不影响使用
yum install crontabs
注:vixie-cron软件包是cron的主程序;
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
cron是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/service crond start #启动服务
/sbin/service crond stop #关闭服务
/sbin/service crond restart #重启服务
/sbin/service crond reload #重新载入配置
tail -100 /var/log/cron #查看最下面100行日志
tail -f /var/log/cron #查看动态日志

2.查看Crontab状态:

service crond status#查看Crontab状态
ntsysv #查看crontab服务是否已设置为开机启动
chkconfig –level 35 crond on #加入开机自动启动

3.添加定时任务:

crontab -e #编辑cron任务模式
i #默认文字编辑器为vim,按i字母键即可添加cron任务
30 3 * * * /usr/local/etc/rc.d/lighttpd restart #将命令代码放入,此命令意义为每天的03:30 重启apache
ESC #按ESC键退出编辑模式
:wq #键入:wq保存
service crond restart #重启crontab服务

4.查看任务列表:

crontab -l

5.Crontab命令在线验证工具:

https://tool.lu/crontab

6.注意执行文件时要使用的python环境2还是3,有没有再次环境安装对应的第三方库,文件是否可执行文件,用户是否有文件执行权限,文件是否隐藏,文件要写绝对路径

第一列的 * 表示:分
第二列的 * 表示:时
第三列的 * 表示:日
第四列的 * 表示:月
第五列的 * 表示:周

0 */1 * * * python3 /test/test.py
//每小时执行一次test.py文件

*/70 * * * * python3 /test/test.py
//每70分钟执行一次test.py文件

* */1 * * * python3 /test/test.py > /test/test.log 2>&1 
//每小时执行一次test.py文件,将输出内容保存至test.log

8.特殊字符: 星号():代表每的意思,例如month字段如果是星号,则表示每月都执行该命令操作。 逗号(,):表示分隔时段的意思,例如,“1,3,5,7,9”。 中杠(-):表示一个时间范围,例如“2-6”表示“2,3,4,5,6”。 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如/10,如果用在minute字段,表示每十分钟执行一次。

##每月每天凌晨3点30分和中午12点30分执行test.sh脚本
 
30 3,12 * * *  /home/test.sh           
 
 
 
##每月每天每隔6小时的每30分钟执行test.sh脚本
 
30 */6 * * *  /home/test.sh
 
##每月每天早上8点到下午18点每隔2小时的每30分钟执行test.sh脚本
30 8-18/2 * * * /etc/init.d/network restart
 
 
 
##每月每天晚上21点30分执行test.sh脚本
 
30 21 * * *  /etc/init.d/network restart
 
 
 
##每月1号、10号、22号凌晨4点45分执行test.sh脚本
 
45 4 1,10,22 * * /etc/init.d/network restart
 
 
 
##8月份周一、周日凌晨1点10分执行test.sh脚本
 
10 1 * 8 6,0 /etc/init.d/network restart
 
 
 
##每月每天每小时整点执行test.sh脚本
 
00 */1 * * *  /etc/init.d/network restart



每分钟执行 */1 * * * * 

每小时 0 */1 * * *

每天 0 0 * * *

每周 0 0 * * 0

每月 0 0 1 * *

每年执行 0 0 1 1 *

每小时的第3和第15分钟执行 3,15 * * * *

在上午8点到11点的第3和第15分钟执行 3,15 8-11 * * * 

每隔两天的上午8点到11点的第3和第15分钟执行 3,15 8-11 */2 * *

每个星期一的上午8点到11点的第3和第15分钟执行 3,15 8-11 * * 1

每月每天的 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 20 0-23/2 * * *

每天7:30执行 30 7 * * *

每月1号和15号执行 0 0 1,15 * *

每小时的第一分钟执行 1 * * * *

每月的1、11、21、31日的6:30执行 30 6 */10 * *

作者:TsengYUen
链接:https://www.jianshu.com/p/e121502c4070
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

9.查看crontab日志

linux中默认情况下,crontab中执行的日志写在/var/log下


#ls /var/log/cron*

/var/log/cron /var/log/cron.1 /var/log/cron.2 /var/log/cron.3 /var/log/cron.4

crontab的日志比较简单,当然也可以将每条 crontab中的任务增加自己的日志,有利于查找执行失败原因。

0 6 * * * //root/script/ss.sh >> /root/for_crontab/mylog.log 2>&1                //把错误输出和标准输出都输出到mylog.log中

因此查看crontab日志可以直接查看log文件信息

tail -f /var/log/cron       //查看最新的日志
tail -100 /var/log/cron     //查看最新的100条日志