cron计划任务

总结

配置文件位置

  • /etc/crontab
  • /var/spool/cron/用户名 或者/var/spool/cron/crontabs/用户名
  • /etc/cron.d 这里面必须加运行用户,否则不会被执行

一些命令
$ service crond start //启动服务
$ service crond stop //关闭服务
$ service crond restart //重启服务
$ service crond status //查看状态
linux发行版本没有service这个命令时:
/etc/init.d/cron stop
/etc/init.d/cron start

一、cron(crond)简介

安装完操作系统后,系统会默认安装此服务工具,并自动启动crond进程
在linux_ubuntu 系统中进程名叫cron,在大多数系统中进程名叫crond,这点需要注意。
cron(crond)会每分钟定期检查是否有要执行的任务。

在这里插入图片描述
周期任务是有cron这个守护进程来处理,而cron的配置文件称为crontab,是cron table的简写

二、crontab命令

1.命令格式:

包含两个命令

crontab [-u user] file

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

2.命令功能:

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

3.命令参数:

第一种形式(将原先存在的文件加入到corn中)

-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般由root用户来运行。

file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。
在这里插入图片描述

第二种形式(用命令行的形式加入到corn中)

-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
在这里插入图片描述
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。 (下面是删除后的反应)

-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
在这里插入图片描述
-i:在删除用户的crontab文件时给确认提示。-r,-l的时候也行,不过没有意义
在这里插入图片描述

三、添加调度命令(添加了并非就会运行)

注意,下面两种方式并非是crontab运行,而是cron(crond)来运行的,crontab只是一个被编辑的表

1、/etc/crontab(root用户)

/etc/crontab这种方法只有root用户能够使用,能够直接给其他用户设置计划任务,更加针对的是系统任务。
在这里插入图片描述

2、crontab -e

使用这个命令后会打开一个文件让你去编辑,编辑完成后,会在/var/spool/corn/下面生成一个当前用户的文件,比如/var/spool/cron/root文件(一般都会这样)
在这里插入图片描述
但是在linux_ubuntu下会在/var/spool/corn/crontabs/下生成用户姓名的文件,比如/var/spool/corn/crontabs/root
在这里插入图片描述

四、cron查找配置文件

  • /etc/crontab
  • /var/spool/cron/用户名 或者/var/spool/cron/crontabs/用户名
  • /etc/cron.d 这里面必须加运行用户,否则不会被执行

1、/etc/crontab一般被认为是系统的配置文件,当然可以做其他的
2、一般来说/var/spool/cron/用户名 这里每个用户最多只有一个文件 这个方式是每个用户的配置文件
3、/etc/cron.d cron在执行的时候,会扫描这里面的所有文件的内容,想要添加任务可以直接新建一个文件,然后放到这个文件夹里面,这里一般在时间后面加上指定的用户名,当然可以不加

五、配置文件的正确书写

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root
HOME=/

这四行是用来配置crond任务运行的环境变量,

  • 第一行SHELL变量指定了系统要使用哪个shell,这里是bash
  • 第二行PATH变量指定了系统执行命令的路径,
  • 第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的 值为空,则表示不发送任务执行信息给用户,
  • 第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。

已经内置了三个文件夹,里面的文件会每周每月每日执行,
在这里插入图片描述

六、关于时间

在这里插入图片描述
有几个特殊符号

  • / 表示时间间隔,也就是会跳过这个时间,比如在分钟里面,0-30/2 表示前0-30分钟之内每2分钟执行一次,也可以和*结合, */2表示没两分钟执行一次
  • 逗号, 表示特定的值,比如在分钟里面1,2,3 表示每小时的1,2,3执行
  • -连字符表示值的范围,在分钟里面1-30表示1到30分钟

七、环境变量以及运行问题

如果创建了一个crontab但是任务无法执行,但是手动执行命令没有问题,这种情况一般就是没有在文件中配置环境造成的。
手动执行任务是在当前shell环境中进行的,因此能够找到环境变量,但是在系统自动执行的时候,是不会加载任何环境变量的,因此需要在文件中指定所需要的所有环境变量。

在shell脚本中
1、设计文件路径时要写全局路径
2、如果要运行其他环境变量时,通过source命令引入环境变量

比如在这里插入图片描述
如果手动执行可以但是crontab就是不执行,那就是环境变量出的问题,直接在crontab中引入环境变量解决问题,即在定时器任务上方加上环境变量,如果还涉及到其他的,从后面添上

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

八、cron重启

有的没有crond,那么就输入cron

1.在系统中有service这个命令时:

这个命令在red hat当中常用,有的linux发行版本中没有这个命令。
$ service crond start //启动服务
$ service crond stop //关闭服务
$ service crond restart //重启服务
$ service crond status //查看状态

2.linux发行版本没有service这个命令时:

/etc/init.d/cron stop
/etc/init.d/cron start

九、其他问题

1、日志输出

每次任务输出都发给当前系统用户的话,长期积累日志信息会异常的庞大,因此可以忽略日志输出

 * * * * * /root/JIF/upJob.sh > /dev/null 2>&1

2、系统级任务调度和用户级任务调度

如果要定义一个定时重启系统的任务就必须把任务放到/etc/crontab文件中,即使在root用户下建立一个定时重启任务也是无效的

3、其他问题

  • 新创建的cron job,不会马上执行,至少要过2分钟才执行,或者重启cron会立即执行
  • %是有特殊含义的,表示换行,如果要用到%必须要%转义
  • 可以在时间后加上用户,也可以不指定,/etc/cron.deny是不允许用户使用crontab命令,/etc/cron.allow是允许所列用户使用crontab命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪睡的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值