Linux服务器Crontab定时任务配置使用方法

我们使用Linux系统的时候常常会遇到周期性的任务调度需求,使用自动化任务调度方法可以避免遗忘和出错。

一、Crontab环境安装

apt-get install cron

二、Crontab使用

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。

1. crontab文件的含义

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute hour day month week command
==========================================
minute	:表示分钟,可以是从0到59之间的任何整数。
hour	:表示小时,可以是从0到23之间的任何整数。
day		:表示日期,可以是从1到31之间的任何整数。
month	:表示月份,可以是从1到12之间的任何整数。
week	:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command	:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

Crontab格式说明
在以上各个字段中,还可以使用以下特殊字符:

星号(*)  :代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,)  :可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-)  :可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
同时正斜线可以和星号一起使用,例如:*/10,如果用在minute字段,表示每十分钟执行一次。

2. crontab命令详解

命令格式:

crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]

命令功能:

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。
时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。
这个命令非常设合周期性的日志分析或数据备份等工作。

命令参数:

-u user	:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。 filefile是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e	:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l	:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r	:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i	:在删除用户的crontab文件时给确认提示。 

3. crontab服务操作方法

service cron start   // 启动服务
service cron stop    // 关闭服务
service cron restart // 重启服务
service cron reload  // 重新载入配置
service cron status  // 启动服务

4. crontab配置方法

运行" crontab -e",进入编辑状态:

1. 如果需要稍微复杂一点的任务,可以在进入“crontab -e”编辑模式之前先创建shell脚本;然后将需要执行的任务在shell脚本中实现;接下来将shell脚本保存为test.sh,并给shell脚本test.sh赋予可执行权限;最后将shell脚本test.sh在进入“crontab -e”编辑模式后写入command字段执行,如下图红框所示:
2. 如果任务比较简单可以直接在进入“crontab -e”编辑模式后直接在command字段进行实现
3. 每一个定时任务占一行,可以在编辑最后一行依次添加
4. 为避免定时任务执行后出现大量打印信息,可以编辑定时任务时使用重定义方法输出log

【注意】crontab的默认编辑器是nano,操作比较复杂,新手估计会怀疑人生;这里给出一版操作方法:

方案一:nano版操作方法

crontab编辑状态
任务编辑完成后,接下来我们需要保存任务;
在使用命令之前如果不清楚命令有什么用,可以先执行【CTRL+G Get Help】获取命令帮助信息;
CTRL+G Get Help
接下来执行【CTRL+O Write Out】写入操作;
然后在写入操作界面下选择【CTRL+T To Files】写入文件选择,如下图红框所示:
在这里插入图片描述
后面这一步的操作非常重要,将光标移动到下图红框位置(不管是使用【CTRL+F Forward】向前移动,还是右箭头【->】均可);
选中后回车[ENTER]保存,会自动跳转到编辑界面
在这里插入图片描述
然后【CTRL+X Exit 】退出即可;
最终如果退出后出现如下log,证明cron任务创建或更新成功!

crontab: installing new crontab

终于弄完了,但是这样就满足了吗,有没有更简单的方法呢?!
别急… … 下面正式揭晓答案:另外一种更简单的方法,一劳永逸!!!

方案二:vim版操作方法

既然我们知道了vim版操作方法,那么我们怎么修改crontab的默认编辑器呢?
crontab的默认编辑器切换方法如下:如图选择常用的vim编辑器即可

sudo select-editor

crontab的默认编辑器切换
编辑器选择完成后,我们就可以随心所欲的操作想要的定时任务了

1. 首先还是先使用“crontab -e”进入任务界面
2. 接下来使用vim编辑器的操作命令【i】进入编辑模式;进行定时任务编辑
3. 定时任务编辑完成后,使用vim编辑器保存并退出命令 【ESC】+ wq
4. 任务提示:crontab: installing new crontab;成功创建或更新定时任务

Crontab定时任务创建或更新完成后还可以用如下命令进行查看,确认定时任务是否创建成功

crontab -l

5. 监测cron任务

虽然我们已经成功添加了任务,但是如果cron的守护进程并没有启动,它根本都不会监测到有定时任务需要执行,当然也就不会执行我们的定时任务。
那么我们如何确定cron是否成功的在后台启动呢?有如下3种方式:

1. ps aux | grep cron
2. pgrep cron
3. service cron status  # 查看cron服务状态

service cron status 查看cron服务状态
cron服务状态

三、Crontab注意事项

1. 注意环境变量问题

在crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置;可以在crontab脚本开头加入环境变量

#!/bin/sh
source /etc/profile
export LD_LIBRARY_PATH=/home/work/local/mysql5/lib/mysql
2. 系统级任务调度与用户级任务调度
Crontab定时任务分为两种系统级任务调度和用户级任务调度:
用户级任务调度:root用户的任务调度操作可以通过“crontab –u root –e”来设置,也可以将调度任务直接写入/etc/crontab文件;
系统级任务调度:需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个定时重启系统的任务也是无效的。
3. crontab使用注意事项
1. 当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
2. 千万别乱运行crontab -r:它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
3. 在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’
4. Crontab使用技巧
1. 定时任务最好添加上注释,避免过多的定时任务冲突或未知
2. 环境变量问题,crontab执行shell时,只能识别为数不多的环境变量,普通的环境变量是无法识别的,所以在编写shell时,最好使用export重新声明变量,确保脚本执行。 
3. 命令的执行最好用脚本,并给脚本加可执行权限
4. 时间变量要用反斜线转义,在crontab中%是有特殊含义的,表示换行的意思,最好用脚本转换时间变量
5. 定时任务中不要随意打印日志文件;最好重定义log: > /user/xxx/xx.log 2>&1  ==> & > /user/xxx/xx.log
6. 定时任务里面的程序脚本尽量用全路径,避免脚本名重复造成任务执行错误
8. 定时任务尽量精简,避免不必要的程序以及命令输出
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值