您的位置:首页 > 运维架构 > Linux

Linux例行性工作调度---crontab与at

2017-10-17 15:26 330 查看

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并不需要指定身份。也就是说系统默认的例行
c9af
性工作是以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]

Zoom … Zoom …

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: