Linux学习21-设置定时任务crontab

前言

做自动化测试写的脚本需设置定时任务,在指定的时间去执行,这就需要用到定时任务。之前用jenkins可以在里面设置定时任务,很好用,其实不用jenkins,在linux上也可以用crontab做个定时任务。
本篇学下crontab定时任务的语法,制作一个简单的python脚本文件,使用crontab定时执行

crontab语法

crontab一般在目录/etc/crontab,可以用cat命令查看到里面的内容

[root@yoyo etc]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

crontab定时任务命令规则:

星期 命令 路径
minute hour day month week command path
* * * * * command path
  • minute:

    表示分钟,可以是从0到59之间的任何整数。

  • hour:

    表示小时,可以是从0到23之间的任何整数。

  • day:

    表示日期,可以是从1到31之间的任何整数。

  • month:

    表示月份,可以是从1到12之间的任何整数。

  • week:

    表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

  • command:

    要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

  • path:

    需执行的文件,用绝对路径

crontab命令常用的特殊字符

符号 说明
* 表示任何时刻
, 表示分割
- 表示一个段,如第二段里:1-5,就表示1到5点
/n 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1

编辑crontab文件

各个参数说明:

参数 说明
-e 执行文字编辑器来设定时程表,内定的文字编辑器是 vi(可以指定别的用户,但是必须拥有权限)
-r 删除目前的时程表
-l 列出目前的时程表
-v 列出用户cron作业的状态

使用crontab -e去编辑一个定时任务,默认进入vi编辑器,按i进入编辑模式,编辑如下内容

*/1 * * * * /bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log

实现的功能:每分钟执行一次 echo 'hello world ! ~yoyo!’ ,输出的内容保存到~/yoyo.log目录

编辑完成后,按esc键 :wq保存退出,使用crontab -l查看当前任务状态

[root@yoyo /]# crontab -e
crontab: installing new crontab
[root@yoyo /]# crontab -l
*/1 * * * * /bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log

等一分钟后,cd到~目录,使用tail查看输出的内容

[root@yoyo /]# cd ~
[root@yoyo ~]# ll
total 28
drwxr-xr-x 2 root root 4096 Jun 29 17:55 conf
drwxr-xr-x 4 polkitd ssh_keys 4096 Jun 29 17:55 data
drwxr-xr-x 2 root root 4096 Jun 29 17:55 logs
drwxr-xr-x 5 root root 4096 Jun 29 17:39 mysql
-rw------- 1 root root 433 May 17 08:34 nohup.out
drwxr-xr-x 4 root root 4096 Jun 30 17:16 yoyo
-rw-r--r-- 1 root root 63 Jul 10 23:12 yoyo.log
[root@yoyo ~]# tail yoyo.log
hello world ! ~yoyo!
hello world ! ~yoyo!
hello world ! ~yoyo!
[root@yoyo ~]#

查看crontab执行的历史

我们如何知道crontab是否执行了定时任何呢?可以在 /var/log目录查看运行的日志记录,使用tail 查看

tail -10 /var/log/cron

[root@yoyo log]# cd /var/log
[root@yoyo log]# tail -10 cron
Jul 10 23:10:50 yoyo crontab[8045]: PAM pam_end: NULL pam handle passed
Jul 10 23:10:54 yoyo crontab[8106]: (root) LIST (root)
Jul 10 23:10:54 yoyo crontab[8106]: PAM pam_end: NULL pam handle passed
Jul 10 23:11:01 yoyo crond[541]: (root) RELOAD (/var/spool/cron/root)
Jul 10 23:11:01 yoyo CROND[8125]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:12:01 yoyo CROND[8232]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:13:01 yoyo CROND[8340]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:14:01 yoyo CROND[8446]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:15:01 yoyo CROND[8553]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
Jul 10 23:16:01 yoyo CROND[8662]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
[root@yoyo log]#

常用的定时任务

每1分钟执行一次command

*/1 * * * * command

每小时的第15,20,30分钟执行

15,20,30 * * * * command

每天早上9点和晚上17点上下班执行

* 9,17 * * * command

每天早上8点30和晚上20点30执行

30 8,20 * * * command

每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command

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

3,15 8-11 * * 1 command

每月1、10、22日的4 : 45执行

45 4 1,10,22 * * command

每周1,3,5 晚上八点执行

* 20 * * 1,3,5 command

每周1,2, 3 4, 5 早点9点20打卡

20 9 * * 1,2,3,4,5 command

每个月的20号都来那么一次

* * 20 * * command

每年的情人节执行一次

* * 14 2 * command

每2个小时执行一次

* */2 * * * command

执行python脚本

接下来用python写个hello world,去执行下吧

[root@yoyo log]# cd ~
[root@yoyo ~]# vi hello.py
# 编辑 print("hello")
[root@yoyo ~]# python hello.py
hello
[root@yoyo ~]# crontab -e
crontab: installing new crontab
[root@yoyo ~]# crontab -l
*/1 * * * * /bin/python ~/hello.py >> ~/hello.log
[root@yoyo ~]# ll
total 36
drwxr-xr-x 2 root root 4096 Jun 29 17:55 conf
drwxr-xr-x 4 polkitd ssh_keys 4096 Jun 29 17:55 data
-rw-r--r-- 1 root root 6 Jul 10 23:36 hello.log
-rw-r--r-- 1 root root 16 Jul 10 23:34 hello.py
drwxr-xr-x 2 root root 4096 Jun 29 17:55 logs
drwxr-xr-x 5 root root 4096 Jun 29 17:39 mysql
-rw------- 1 root root 433 May 17 08:34 nohup.out
drwxr-xr-x 4 root root 4096 Jun 30 17:16 yoyo
-rw-r--r-- 1 root root 546 Jul 10 23:35 yoyo.log
[root@yoyo ~]# tail hello.log
hello
hello

第9期《python3接口自动化测试》课程,6月29号开学!
主讲老师:上海-悠悠
上课方式:QQ群视频在线教学
本期上课时间:6月29号-7月28号,每周六、周日晚上20:30-22:30
课表详情:https://www.cnblogs.com/yoyoketang/p/11030218.html

课表详情,点左下角

(0)

相关推荐

  • 操作系统宕机,MySQL数据找回记录

    一.概述 如果Linux操作系统宕机,启动不了,救援模式(rescue installed system)也行不通的时候,那么该机器上的MySQL数据还能恢复吗?如果能,怎么恢复呢?带着这个问题我们做 ...

  • Rhce证书学习Day(一)

    考试环境:redhat8 考试时间:上下午两场   CSA (EX200)150分钟(20道题左右)  CE(EX294) 240分钟(15道题左右) 身份证,邮箱 命令: rht-vmctl   在 ...

  • Shell—定时任务(crontab)

    如何让shell脚本每天定时执行? 1.新建需要定时执行的shell脚本,这里为date.sh脚本. #!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/us ...

  • 【Linux】Linux学习之文件查找、文件打包和解压缩、文件系统操作与磁盘管理、帮助命令、任务计划crontab

    6.文件查找 与搜索相关的命令常用的有whereis.which.find和locate. whereis简单快速 whereis <关键词> whereis搜索很快,因为其并没有从硬盘中 ...

  • ip命令网络对象常见操作命令有哪些?linux学习

    ip命令是iproute软件包中的一个强大的网络配置工具,用于显示或管理Linux系统的路由.网络设备.策略路由和隧道.作为ip命令参数选项之一的操作对象,即对指定的网络对象完成的具体操作.通常,每一 ...

  • Linux学习的顺序是什么?Linux入门

    Linux操作系统是现在非常受欢迎的技术,现在市场上有很多服务器都开始使用Linux系统,可见Linux技术是非常受欢迎,因此也有很多人想要学习Linux,那么Linux学习需要多久?培训需要多长时间 ...

  • Linux学习1-Xshell连接阿里云ECS服务器

    前言 前段时间双十一活动,头脑发热买了个阿里云的服务器,买了后也不知道怎么用一直放着在.最近想起来,于是看了下阿里云ECS的相关资料. 由于平常一直用xshell比较多,不太习惯阿里云的ESC终端连接 ...

  • Linux学习3-yum安装java和Tomcat环境

    前言 linux上安装软件,可以用yum非常方便,不需要下载解压,一个指令就能用yum安装java和tomcat环境. 前面一篇已经实现在阿里云服务器上搭建一个禅道系统的网站,算是小有成就,但并不是每 ...

  • Linux学习6-CentOS搭建appium服务

    前言 用过appium的应该清楚,每次都需要先启动appium服务,然后再运行代码非常不方便,像selenium就不用启动服务,直接运行脚本. appium实际上只是提供服务,所以我想把它搭建到阿里云 ...

  • Linux学习7-tomcat部署多个项目(多个端口)

    前言 前面已经在tomcat上搭建了jenkins的环境,如果我们有多个项目需要部署的话,如何在一个tomcat下部署多个项目呢? 前面是直接在:8080/jenkins访问的,如果有其它项目部署的话 ...

  • Linux学习8-CentOS部署自己本地的django项目

    前言 自己本地写好的django项目,如何部署到linux服务器上,让其他的小伙伴也能访问呢?本篇以centos系统为例,把本地写好的django项目部署到linux服务器上 环境准备: 环境准备: ...

  • Linux学习9-CentOS搭建nginx环境

    前言 之前我们搭建网站的时候,把war包放到tomcat下就能运行起来了,为什么部署上线的时候,又用到了nginx呢? nginx可以做多台服务器的负载均衡,当用户非常少的时候,可以用一台服务直接部署 ...