Linux的例行性工作调度是通过crontab与at来实现的
- 一种是例行性的,就是每隔一定的周期就要执行一次的事项(循环)。
- at:at是个处理仅执行一次就结束调度的命令,执行at时,必须要有atd这个服务。
- 一种是一次性的,就是做完一次就没有了(一次)
- crontab:crontab所设置的工作将会一直循环进行下去,必须要有crond服务。
Linux常见的例行性工作
- 日志文件的轮替,日志文件会记录系统所发生的各种信息,文件会越来越大(占容量,影响读写性能),需要及时处理
- 日志文件分析logwatch任务,系统发生软件问题,硬件错误等需要CentOS提供的程序“lowatch”来主动分析日志信息。
- 自动更新locate的数据库,该命令是通过已经存在的文件名数据库来镜像系统中文件名的查询。需要系统自己例行性自动更新这个数据库。
- 删除临时文件,某些软件运行中会产生一些临时文件,系统同例行性工作调度执行tmpwatch的命令来删除临时文件。
- 等等
一、循环执行的例行性工作调度-crontab
在实际开发中,我需要每天定时备份一个数据库,需要用到crontab。
首先可以限制能使用crontab的用户账号。
- /etc/cron.allow,将可以使用crontab的账号写入其中,不再这个文件内的用户则不可以视同crontab。
- /etc/cron.deny,将不可以使用crontab的账号写入其中,若不再这个文件内的用户就可以使用crontab。.
/etc/cron.allow比/etc/cron.deny优先级更高,二者保留一个文件即可,系统默认保留/etc/cron.deny,可以将不允许执行crontab的账号写入其中(一个账号一行)。cron每执行的一项工作都会被记录到/var/log/cron这个日志文件中。
crontab的语法:
crontab [-u username] [-l|-e|-r]
-u : 只有root才能执行这个任务,即棒其它用户新建/删除crontab工作调度;
-e : 编辑crontab的工作内容;
- l : 查看crontab的工作内容;
- r : 删除所有的crontab工作内容。
执行“crontab -e”进入到vi编辑界面,一个工作一行,编辑完成输入“:wq”保存离开 vi就可以了。每个工作都有6个字段,前五个“0 2 * * *”是cron表达式,不熟悉的可搜相关博客了解语法,最后一个是要执行的任务,我这里执行的是我备份数据库的脚本文件michaelbackup.sh。参考文章:Linux服务器实现定时自动备份Mysql数据库。
“crontab -l”
这个crontab-e是针对用户的cron来设计的,系统的例行性任务不需要crontab -e来管理,只需要编辑/etc/crontab这个文件就可以。
区别:
- crontab-e这个crontab其实是/usr/bin/crontab这个执行文件
- 但是系统例行性任务的/etc/crontab是一个纯文本文件。可以以root身份编辑一下这个文件。编辑完/etc/crontab这个文件,保存之后,cron的设置就自动会来执行了。Linux下面的crontab会自动每分钟重新读取一次/etc/crontab的例行工作事项。
看一下/etc/crontab的内容:
这个与我们用户自己的crontab -e管理编辑的任务不同的是它指定了执行这些任务的用户 图中跟在cron表达式后面的“root”字段。用户自己的crontab并不需要指定身份。也就是说系统默认的例行性工作是以root的身份来进行的。
那么关于后面跟的类似于“run-parts --report /etc/cron.hourly”的字段呢?
run-parts其实是一个bash script,直接进入/usr/bin/run-parts去看看,就会发现这个命令会将后面接的“目录”内的所有文件找出来执行一遍。也就是说你想让系统每小时主动执行某个命令,将该命令写成script,并将该文件放置到/etc/cron.hourly/目录下即可。下面几行的daily,weekly,monthly见名知意同理。
由于CentOS提供的run-parts这个script辅助,因此/etc/crontab这个文件里面支持两种执行命令的方式,一种直接执行命令,一种是以目录来规划,定期执行目录里所有的script。
二、仅执行一次的工作调度-at
没有atd服务的安装就好了:# apt-get install at
同crontab一样,at的权限管理优先级为/etc/at.allow>/etc/at.deny,如果两个文件都没有那么只有root用户能使用at命令。
at的语法:
at [-mldv] TIME
-m : 当at的工作完成后,及时没有输出信息,以email通知用户该工作已完成;
- l : at -l相当于atq,列出目前系统上面所有该用户的at调度;
-d : at -d相当于atrm,可以取消一个再at调度中的工作; - v: 可以使用较明显的时间格式列出at调度中的任务列表。
TIME:时间格式,定义什么时候进行at这项工作的时间。
—ex>03pm 2017-10-17某年某一天某时刻进行
—ex>now + 5 minutes 5分钟后进行
—ex>03pm + 3 days 3天后下午3点进行
at -c 工作号码
- c: 可以列出后面接的该项工作内容的实际命令内容。
设定5分钟后执行/root/michaelbackup.sh script备份数据库。
编辑完需要执行的命令这一行“at> /root/michaelbackup.sh”输入[ctrl] + d就可结束编辑。
注意“job 1 at …”这个1就是工作号码。
查看工作内容:“# at -c 1”
查询目前主机上面有多少还未执行的at工作调度:# atq
删除某个工作调度:# atrm [jobnumber]