这里写目录标题
总结
配置文件位置
- /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命令