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
Linux学习21-设置定时任务crontab的更多相关文章
- Linux学习12-CentOS设置多个tomcat开机自启动
前言 一台服务器上有多个tomcat环境,重启服务器后,每次需要手动一个个启动服务,非常麻烦,于是可以设置tomcat开机自启动. tomcat开机自启动非常慢,可以修改jvm下配置解决tomcat开 ...
- Linux 设置定时任务crontab命令
1. crontab命令概念 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. cron 系统调度进程. 可以使 ...
- Linux/Unix下设置定时任务
Unix系统提供了cron和at命令,使系统和用户可以定时运行一定的程序,而不需手工启动. 使用cron用于周期性的执行一个命令,为了使用它,必须编辑crontab文件.系统缺省的/etc/cront ...
- Linux学习之设置联网,关闭防火墙,关闭selinux
桥接模式,给一台物理机,有自己独立的IP. boot分区,引导分区,系统启动,内核文件. swap分区,内存扩展分区.1.5或2倍.内存不够的时候,会写入其中.正常给8G或者16G就够了.不需要非要1 ...
- Linux学习25-Xshell设置页面最大显示行数
前言 在使用xshell查看日志的时候,有时候日志太多,往上翻的时候,前面的就找不到了. 需要设置xshell的页面显示最大行数,查看更多的日志详情. 设置显示行数 左上角-文件-属性 终端-设置最大 ...
- Linux学习-IP设置
网卡命名规则 CENTOS6的网卡命名方式:它会根据情况有所改变而非唯一且固定,在CENTOS6之前,网络接口使用连续号码命名: eth0. eth1等,当增加或删除网卡时,名称可能会发生变化 CEN ...
- ubuntu crontab设置定时任务
ubuntu 设置定时任务 crontab -l #查看详情crontab -e #设置定时任务 * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用* ...
- Linux下设置定时任务删除归档日志
1.编辑删除归档日志的脚本----/home/oracle/clearlog.sh #! /bin/bash source ~/profile_orcl#记录归档删除的日志exec >> ...
- linux 的计划任务 定时任务
linux的计划任务,也叫做定时任务 https://www.cnblogs.com/mingforyou/p/3930636.html 名字是crond 查看linux本机的定时任务 crontab ...
随机推荐
- linux添加虚拟内存交换内存,以及设置优先使用交换内存
场景:在网上买了台低配置服务器,1c1g,内存太小了,于是打起了交换内存的注意.上网一查,居然还真可以.以下是具体步骤 首先新建一个交换分区文件夹 dd if=/dev/zero of=/usr/sw ...
- GraphQL漏洞案例之获取Facebook任意用户的朋友列表和部分支付卡详细信息
Facebook有一个GraphQL endpoint,只能由Facebook的某些应用程序使用.需要用户(或页面)access_token来查询GraphQL endpoint. 这里可以将Face ...
- UE4 移动物体的几种方法
转自:https://dawnarc.com/2016/06/ue4%E7%A7%BB%E5%8A%A8%E7%89%A9%E4%BD%93%E7%9A%84%E5%87%A0%E7%A7%8D%E6 ...
- IDEA和JIRA任务联动(redmine同理)
IDEA和JIRA任务联动-操作流程详解 redmine和这个步骤类似,只是第一步选择的工具不一样 操作流程 添加jira配置,File->Setting-->tools-->Tas ...
- Java 中成员变量被局部变量所隐藏
Java 中局部变量与成员变量同名时,局部变量会隐藏成员变量.如果我们想访问成员变量,可以使用 this 关键字. class Test { private int value = 10; void ...
- 一定要记住的14个JVM内存配置参数
jvm setting的参数确实比较多(Oracle官网Java HotSpot VM Options),但是作为一名java开发者,那几个最常用最基本的参数设置和意义一定要死记和理解.这里推荐一个网 ...
- 【LEETCODE】60、数组分类,适中级别,题目:75、560、105
package y2019.Algorithm.array.medium; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.a ...
- yii2 AppAsset.php 和 assetManager 组件
01) 背景:Yii2中使用了 AdminLTE 3.0.0 后框架自带的bootstrap.css 与 admin样式有冲突,需要去掉 bootstrap.css 在 backend/config ...
- docker的容器和镜像的清理
Docker用户会在使用docker一段时间后发现宿主机的磁盘很容易就快被占满,并且手动docker rmi [imgName]似乎并不能释放磁盘,貌似想删掉的镜像依然在宿主机中,下面针对这一问题提出 ...
- vue SPA设计 history hash
<body> <h3>Histort api</h3> <a class="api a">a,html</a> < ...