我的理解,后台任务通常分为两种:常驻和定时。之前的文章《pm2进程管理工具使用总结》主要针对的是常驻任务。今天来谈谈crontab,主要针对的是定时任务。
实验环境:centos7
介绍crontabcrontab的服务进程名为crond,英文意为周期任务。顾名思义,crontab在Linux主要用于周期定时任务管理。通常安装操作系统后,默认已启动crond服务。crontab可理解为cron_table,表示cron的任务列表。类似crontab的工具还有at和anacrontab,但具体使用场景不同,可参见附录《让你学会Linux计划任务》一文了解更多。
关于crontab的用途很多,如
定时系统检测;
定时数据采集;
定时日志备份;
定时更新数据缓存;
定时生成报表;…等等任务
当然,更多使用场景是要以视具体情况而定了。毕竟是工具通常都是常用规则总结而成的产物。
确认crond服务已经安装与开启之后,下面开始具体说明
简单示例先来个简单示例体验一下。
目标:每分钟向/tmp/time.txt文件下写入当前时间
新建crontab任务
$crontab-e//打开crontab任务编辑*****date/tmp/time.txt
静静等待几分钟
$cat/tmp/time.txtDo29.Dez22:45:01CSTDo29.Dez22:46:01CSTDo29.Dez22:47:01CST
从上面结果看出,每分钟执行了date并写入到/tmp/time.txt。
简单示例演示成功。下面从细节深入说明crontab使用。
使用选项上面的实验中使用了crontab命令的-e选项。我们来看看crontab命令中有哪些选项?
-e选项表示打开当前用户的crontab任务列表配置文件。当然也可以直接打开,路径通常是在/var/spool/cron/下,文件以用户名命名,如/var/spool/cron/root。不过,采用-e方式打开,福利是可以帮助我们自动检查任务配置符合规则。
-u选项指定某用户的任务列表,很好理解。比如我当前是root用户,想操作poloxue用户的任务列表。如下:
$crontab-upoloxue-e
-l选项列出某用户的所有任务列表
-r选项删除某用户的所有任务列表,这个选项使用小心为上,估计也只是自己实验时玩玩而已,正常不使用。
crontab命令的选项中,主要使用的就是以上几个,理解比较简单。
任务配置说完了crontab的命令选项,下面开始真正的大戏,任务列表文件如何配置?
首先,看下crontab任务列表配置格式,示例文件如下:
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root#更多细节man4crontabs#计划任务定义的例子:#.----------------分(0-59)#
.-------------时(0-23)#
.----------日(1-31)#
.-------月(1-12)#
.----星期(0-7)(星期日可为0或7)#
#*****执行的命令*****date/time.txt21
从上面的示例文件可看出,crontab的任务列表主要由两部分组成:环境变量配置与定时任务配置。可能大家在工作中更多是只用到了任务配置部分。
环境变量配置部分理解环境变量配置这部分可以帮助我们减少去踩一些不必要的坑。简单说明上面涉及的环境变量。
SHELL为/bin/bash,表示使用/bin/bash解释执行命令
PATH表示到哪些目录路径寻找命令程序,此环境变量的值说明了为什么我们在crontab中执行命令时,尽量要写命令全路径才能执行的原因。
MAILTO变量作用是当任务执行有输出时,内容发送到哪个用户的邮箱。禁用可以设置MAILTO=”“。
当我们在使用crontab时,发现某些定时任务不能顺利执行,但shell控制台执行成功,环境变量是否正确是我们需要首先白殿疯病厦门那一家医院可以哪个医院白癜风好治