前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Linux中的计划任务—Crontab调度重复执行的任务

Linux中的计划任务—Crontab调度重复执行的任务

作者头像
小小工匠
发布于 2021-08-16 02:53:15
发布于 2021-08-16 02:53:15
1K00
代码可运行
举报
文章被收录于专栏:小工匠聊架构小工匠聊架构
运行总次数:0
代码可运行

文章目录

目标

本博文的主要目的是让笔者和读者可以了解并掌握以下内容: 1、Crontab的基本概念 2、Crontab的基本组成 3、操作Crond服务 4、配置系统和用户计划任务 5、监控计划任务日志


背景介绍

在工作中你是否也碰到过这种定时重复的工作呢?

Crontab可以帮助你从这些定时重复的工作中解脱出来


Crontab是什么

  • 1.Crontab是一个用于设置周期性执行任务的工具;
  • 2.周期性执行的任务我们称为Cron Job;
  • 3.周期性执行的任务列表我们称为Cron Table。

Crontab实践

安装并检查Crontab服务

安装并检查crontab服务

1、检查cron服务:

– 检查crontab工具是否安装:crontab -l – 检查crond服务是否启动:service crond status

2、安装cron

– yum install vixie-cron – yum install crontabs 注意: 1、检查crontab服务状态:service crond status 控制服务的一些提示:service crond 2、检查Apache(阿帕奇)服务状态:service httpd status 控制服务的一些提示:service httpd (检查服务状态,服务名后面一般都加d,如crond、httpd)


案例实现

每分钟都打印当前时间到一个文件中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
service crond status #查看服务是否启动


service crond start	#如没有启动服务,启动服务


crontab -l	#查看当前定时任务列表


crontab -e	#打开定时任务列表文件,进行编辑


*/1 * * * * date >> /tmp/log.txt	#在最后一行插入内容,保存退出(注意*间的空格)


tail -f /tmp/log.txt	#监听log.txt文件内容(动态刷新)

date #查看当前时间

Crontab的基本组成

crontab的基本组成:

  • 1)系统服务CROND: 每分钟都会从配置文件刷新定时任务
  • 2)配置文件: 文件方式设置定时任务
  • 3)配置工具crontab: 用于调整定时任务

Crontab的配置文件格式

小栗子

eg1.每晚的21:30重启apache
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
30 21 * * * service httpd restart
eg2.每月1,10,22日的4:45重启apache
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
45 4 1,10,22 * * service httpd restart
eg3.每月1-10日的4:45重启apache
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
45 4 1-10 * * service httpd restart
eg4.每隔两分钟重启apache
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*/2 * * * * service httpd restart
1-59/2 * * * * service httpd restart(奇数分钟重启)
 0-58/2 * * * * service httpd restart(偶数分钟重启)
eg5.每晚11-早上7点之间,每隔一个小时重启apache
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
* 23-7/1 * * * service httpd restart
eg6.每天18:00-23:00之间每隔30分钟重启apache
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0,30 18-23 * * * service httpd restart
0-59/30 18-23 * * * service httpd restart

Crontab工具的使用

通过 man crontab 或者 crontab --help 查看

1、查看某用户的计划任务列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	crontab -u 用户名 -l(默认-u为当前登录用户)

2、修改某用户的计划任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	crontab -e

3、删除crontab文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crontab -r [username]

root可以指定用户删除其他用户的crontab文件。 其他用户只可以删除自己的crontab文件

4、查看生成的最终计划任务文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/var/spool/cron

5、crontab日志位置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/var/log/cron

Crontab的配置文件

1、用户的crontab定时任务保存文件: /var/spool/cron/root 或者:/var/spool/cron/tabs/root 2、全局(系统)配置文件: – /etc/crontab – 注意格式

1.利用命令crontab -e 进入的是用户级别的计划任务 2.用 vi /etc/crontab 进入后编辑的是系统级的计划任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /etc
ls cron*
tail -f /var/log/cron(任务执行日志)
crontab -e实际上是在修改目录/var/spool/cron/root下的用户对应的文件
cd /etc/cron.d
vi sysstat
crontab sysstat
crontab 文件名 会把(crontab -e)文件里的内容都覆盖 ,所以要非常小心

crontab -l -u crontester查找某个用户下的定时程序
cron.d可以认为是对系统级配置的补充,crontab -l,crontab -e看不到,编辑不了cron.d里的配置

可以在该文件夹下自己创建 
vi crontest
*/1 * * * * echo 'file in cron.d/crontest'
tail -f /var/log/cron

Crontab的日志

  • /var/log/cron 保存着所有的crontab的操作
  • /var/spool/mail/ 下也会以邮件的方式发送日志信息

Crontab的常见错误

Crontab的常见错误之环境变量

不可引用环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~

ls -a 可以看到有.bash_profile文件

vim .bash_profile 新增一个环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--------------
APPDIR=/ect
export APPDIR
-----------------

更新到环境变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
source .bash_profile

检验: echo $APPDIR 可以正常显示,能够被识别 但是在下面这条命令行添加在crontab里不能被识别

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*/1 * * * * echo $APPDIR >> /tmp/appdir.log

———————————————————————— 在/var/log/cron任务执行日志中可以看到,但是cat打开/tmp/appdir.log内容是空的

Crontab的常见错误之命令行操作

  • 1、test 表达式 测试后面的表达式是否真实,但必须加空格 (如果不加空格,那么该命令恒为正确的。)例如: test 1 = 0 如果结果是0 ,那么是正确的(与C语言相反)
  • 2.通过echo $?来查看上一次的执行结果。
  • 3、date +%w 这个是显示今天是星期几
  • 4、需要注意的是在crontab文件中,%需要进行转义

第三个和第五个域之间执行的是或操作 即 星期几和每月几号是或关系

例:4月的第一个星期日早晨1时59分运行a.sh

59 1 1-7 4 0 /root/a.sh 错误的写法 ②59 1 1-7 4 * testdate +%w-eq 0 && /root/a.sh 正确的写法


Crontab的常见错误之分钟设置误用

两小时运行一次date命令

错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date

正确:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0 */2 * * * date

Crontab综合案例解析

crontab最小时间是1分钟,控制1分钟执行多次 本应该是同时执行,但第二条被推迟了30s执行,效果就是1分钟执行了2次

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*/1 * * * * date>>/root/test/half.log
*/1 * * * * sleep 30s;date>>/root/test/half.log

&& 和|| 和 ;的区别

  • command1 && command2: &&左边的command1执行成功(返回0表示成功)后,&&右边的command2才能被执行。
  • command1 || command2: 如果||左边的command1执行失败(返回1表示失败),就执行&&右边的command2。
  • command1;command2: 命令顺序执行,不管前面的是否正确后面的都会依次执行

定时备份oracle数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=/oracle/product/102
export ORACLE_SID=sidname
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8



#以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。
date=date +%Y_%m_%d   #获取系统当前日期时间
days=5  #设置删除5天之前的备份文件
orsid=ip:port/sidname #Oracle数据库服务器IP、端口、SID
orowner=master_ccpx2  #备份此用户下面的数据
bakuser=master_ccpx2   #用此用户来执行备份,必须要有备份操作的权限
bakpass=passwd  #执行备注的用户密码
bakdir=/aaa/bbb/oracle_data  #备份文件路径,需要提前创建好
bakdata=$orowner"_"$date.dmp #备份数据库名称
baklog=$orowner"_"$date.log #备份执行时候生成的日志文件名称
ordatabak=$orowner"_"$date.tar.gz #最后保存的Oracle数据库备份文件
cd $bakdir #进入备份目录
mkdir -p $orowner #按需要备份的Oracle用户创建目录
cd $orowner #进入目录
exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #执行备份
tar -zcvf $ordatabak $bakdata  $baklog  #压缩备份文件和日志文件
find $bakdir/$orowner  -type f -name "*.log" -exec rm {} \; #删除备份文件
find $bakdir/$orowner  -type f -name "*.dmp" -exec rm {} \; #删除日志文件
find $bakdir/$orowner  -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;  #删除5天前的备份
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/09/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux-Crontab计划任务
我们经常使用的是crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表
11pmsleep
2022/10/31
2.1K0
crontab command
Linux 周期性任务 与 Windows 下的计划任务类似,当安装完操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程。crond 进程每分钟会检查是否有要执行的任务,如果有则执行该任务。
恋喵大鲤鱼
2023/10/12
2810
07_Linux基础-计划任务-备份脚本-变量定义和使用
@TOC07_Linux基础-计划任务-备份脚本-变量定义和使用---一. 计划任务主要内容:周期性的计划任务crontab==/var/spool/cron/ 统一存放计划任务的目录====/var/log/cron日志文件====/etc/cron cron.daily/ cron.hourly/ cron.monthly/ cron.weekly/ crontab的顺风车==/etc/crontab==crontab -l====crontab -e==crontab ==-u cali== -ecr
mycpen
2022/09/02
1.2K0
Linux从入门到精通(十一)——计划任务
​ 在很多时候为了自动化管理系统,我们都会用到计划任务,比如关机,管理,备份之类的操作,我们都可以使用计划任务来完成,这样可以是管理员的工作量大大降低,而且可靠度更好。 Linux 系统支持一些能够自动执行任务的服务,我们称为计划任务。
传说之下的花儿
2023/04/16
8740
Linux下crontab命令的用法
任务调度的crond常驻命令 crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类: 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置 Crontab是UNIX系统下的定时任务触发器,其使用
cloudskyme
2018/03/20
1.5K0
CentOS 6系统crontab计划任务
00 02 * * 6 /sbin/reboot  > /dev/null 2>&1
会长君
2023/04/25
1.5K0
【linux命令讲解大全】194.掌握Linux定时任务调度:深入解析crontab命令及其使用技巧
crontab 命令用于提交和管理用户的周期性执行任务,类似于 Windows 下的计划任务。在安装完成操作系统后,默认会安装此服务工具,并自动启动 crond 进程。crond 进程每分钟会定期检查是否有要执行的任务,并自动执行。
全栈若城
2024/03/02
5010
crontab使用方法_crontab 表达式
在Linux系统的实际使用中,可能会经常碰到让系统在某个特定时间执行某些任务的情况,比如定时采集服务器的状态信息、负载状况;定时执行某些任务/脚本来对远端进行数据采集等。这里将介绍下crontab的配置参数以及一些使用实例。
全栈程序员站长
2022/09/23
8530
crontab使用方法_crontab 表达式
计划任务 crontab、at
* * * * * sleep 10; php /home/php/crontab/tolog.php
以谁为师
2019/05/29
9870
【Linux】学习笔记(是) Linux 计划任务 crontab
crontab -e 选择 第二个 vim 即可 在最后加入如下代码 */1 * * * * touch /home/shiyanlou/$(date +\%Y\%m\%d\%H\%M\%S) 格式是
韩旭051
2020/07/02
1.1K0
Linux crond 计划任务添加
############ crond 服务命令 ############ /sbin/service crond start # 启动服务 service crond status # 查看状态 /sbin/service crond stop # 关闭服务 /sbin/service crond restart # 重启服务 /sbin/service crond reload # 重新载入配置 chkconfig –level 35
eisc
2020/09/21
2.6K0
Linux自有服务—防火墙和计划任务
Linux常用自有服务有NTP时间同步服务、firewalld防火墙服务和crond计划任务服务,NTP在上一篇中讲过,这次主要来说一下防火墙firewalld与计划任务的相关内容。如下。
reload
2024/02/20
1710
Linux自有服务—防火墙和计划任务
Linux下Crond计划任务设置格式
在运维行业里流行着这么一句话:能自动完成的,绝不手工去操作;这就涉及到Linux下的计划任务crond 的设置,下面介绍crond 是如何设置的。
星哥玩云
2022/06/29
1.3K0
linux定时运行命令脚本——crontab
Linux中,周期执行的任务一般由cron这个守护进程来处理  ps -ef | grep cron 
阳光岛主
2019/02/19
4.1K0
linux crontab 每隔10秒执行一次[通俗易懂]
在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出。
全栈程序员站长
2022/11/01
9K0
Linux系统管理—linux计划任务和日志的管理
一种是突发性的,就是这次做完了这个事,就没有下一次了,临时决定,只执行一次的任务
全栈程序员站长
2022/09/14
2.2K0
Linux系统管理—linux计划任务和日志的管理
Linux系统之计划任务crontab的基本使用
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
江湖有缘
2023/11/03
1.7K1
Linux系统之计划任务crontab的基本使用
linux计划任务详解,Linux计划任务详解
计划任务是系统的常见功能,利用任务计划功能,可以将任何脚本、程序或文档安排在某个最方便的时间运行。任务计划在每次系统启动的时候启动并在后台运行。在Linux系统中,当我们需要在服务器上定时执行一些重复性的事件时使用的,可以通过Linux计划任务程序来运行准备好的脚本、批处理文件夹、程序或命令,在某个特定的时间运行。
全栈程序员站长
2022/09/14
4.9K0
linux设置crontab任务_定时任务crontab每天7点执行
在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。
全栈程序员站长
2022/09/23
8.5K1
linux设置crontab任务_定时任务crontab每天7点执行
Linux 计划任务
表示 root 用户每天凌晨 1:00 进入到 /etc/data_rsync 文件夹执行 python 脚本
为为为什么
2022/08/06
2.1K0
Linux 计划任务
相关推荐
Linux-Crontab计划任务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文