crontab是一个用于设置周期性被执行的指令。其守护进程为crond.crontab分为两种配置模式,一种为用户级的crontab,一种为系统级的crontab,这儿我们分开来谈。
用户级crontab
用户使用新建循环型工作调度时,使用的crontab命令,crontab-e所有用户都可以使用,普通用户也只能为自己设置计划任务。之后手动写入/var/spool/cron/usename
用户控制文件
/etc/cron.allow:
将可以使用crontab的用户写入,仅该文件内的用户可以使用crontab,相当于白名单
/etc/cron.deny:
将严禁使用crontab的用户写入,仅该文件内的用户严禁使用crontab,相当于黑名单
其中/etc/cron.allow优先级小于/etc/cron.deny,为防止混淆,建议两者仅使用一个。
命令
crontab [-u usename] [-l|-e|-r] 参数: -u:只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度 -e: 调用vi编辑crontab的工作内容 -l: 列出crontab的工作内容 -r: 删除所有crontab的工作内容。
句型
# .---------------- 分钟 (0 - 59) # | .------------- 小时 (0 - 23) # | | .---------- 日期 (1 - 31) # | | | .------- 月份 (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- 周几 (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * 命令
句型与系统级crontab很相像,不同点在于此处不须要指定执行用户linux解压命令,而系统级crontab(/etc/crontab)中须要。
举例如下:
*/10 * * * * /home/test.sh #每隔10分钟就以当前用户执行一次/home/test.sh脚本 0 2 * * * /home/test.sh #每天2点 0 5,17 * * * /home/test.sh #每天5点、17点 0 17 * * sun /home/test.sh #每周日17点 0 4,17 * * sun,mon /home/test.sh#每周一、周日 @reboot /home/test.sh #系统重启时
这儿推荐一个在线小工具:在线生成cron表达式
系统级crontab
系统级crontab通常用于系统的例行性任务,这些方式愈加便捷与直接直接给其他用户设置计划任务crontab 重启linux服务器,并且还可以指定执行shell等。配置文件为/etc/crontab,该文件仅root用户才能编辑。
编辑/etc/crontab
默认内容如下:
SHELL=/bin/bash 这里是指定使用哪种shell接口 PATH=/sbin:/bin:/usr/sbin:/usr/bin 这里指定文件查找路径 MAILTO=root 如果有额外的STDOUT,以email将数据送给谁,可以指定系统用户,也可以指定email地址,如[email protected] # For details see man 4 crontabs # Example of job definition: # .---------------- 分钟 (0 - 59) # | .------------- 小时 (0 - 23) # | | .---------- 日期 (1 - 31) # | | | .------- 月份 (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- 周几 (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * 用户名 命令
即:
分时日月周执行用户任务命令
例如我要添加一个计划任务国内linux主机,每隔10分钟就以root身分执行一次/home/test.sh脚本crontab 重启linux服务器,则在前面添加:
*/10 * * * * root /home/test.sh
这儿注意,不要漏掉执行者root(用户级的crontab中不须要指定执行者),否则会在/var/log/cron日志中出现”ERROR(getpwnam()failed)”错误,计划任务未能正常运行。
重启服务
通常来说Linux下的crontab会手动帮我们每分钟重新读取一次/etc/crontab的例行工作事项,并且出于个别缘由或则是其他的Unix系统中,因为crontab是读到显存当中的,所以栽更改完/etc/crontab以后,可能并不会马上执行,这时侯须要重启crontab服务。
这儿以CentOS为例:
service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重载配置 service crond status //服务状态
若果是CentOS7则:
systemctl restart crond.service //重启服务 systemctl start crond.service //启动服务 systemctl stop crond.service //停止服务 systemctl reload crond.service //重载配置 systemctl status crond.service //服务状态
其他注意事项
取消不须要的输出
当执行结果或则执行的选项中有输出的数据时,该数据会通过mail发送给MAILTO指定的帐号,若某一个调度仍然出错,同时mail服务出现问题(事实上我根本就没开这个服务),将会形成大量的文件于/var/spool/clientmqueue/,所以最好是将crontab上面的命令前面加上>/dev/null2>&1
2>:重定向错误。
2>&1:把错误重定向到输出要送到的地方。即把上述命令的执行结果重定向到/dev/null,即抛弃,同时,把形成的错误也抛弃。
检测日志
日志保存在/var/log/cron中
句型区别
参考资料
鸟哥的Linux私房菜
以上就是本文的全部内容,希望对你们的学习有所帮助,也希望你们多多支持我们。