位置:海鸟网 > IT > linux/Unix >

让Linux操作系统听你的调度

在Linux系统管理时,有许多任务需要周期性的操作。如需要每天晚上十二点备份Oracle数据库系统的数据;需要定期备份部署在Linux系统上的邮箱等等。其实不仅仅是在Linux服务器上需要做这些定期操作,即使在一些客户端上也不开系统的任务调度功能。如邮箱客户端会定期检查远程邮件服务器的信件等等。

  可见任务调度在Linux操作系统中是一项很重要的功能。笔者今天这篇文章就跟大家说说如何才能够让Linux系统听你的调度。

  在Linux系统下有很多任务调度命令,如at、crond等命令。不过笔者最喜欢的还是crond命令。它是Linux系统用来定期执行某个应用程序的命令,是Linux系统的自带命令。默认情况下,当安装完成操作系统之后,便会自动启用整个任务调度命令。它每分钟会定期检查是否需要执行的任务。如果有要执行任务的工作,便会自动执行这项任务。

  如果要查看crond命令的帮助说明,可以在Linux终端下输入man crond命令。系统就会显示出这个命令的相关参数。用户刚开始使用这个命令的时候可能会比较困难。因为Linux系统跟Windows系统不同。后者会提供图形化的界面向导来帮助管理员建立任务计划。而在Linux系统中,则Linux系统工程师需要编写任务调度设置文件来完成这个任务。故要完成一个任务配制文件可能会有一定的难度,因为只要有一点儿误差(如一个标点符号)这个配置文件都将不会起作用。还好系统中本身就存在一些任务调度文件,我们可以以这个文件为蓝图,来做好任务调度规划。

  一、系统任务调度文件赏析。

  是系统的一个任务调度文件crontab。从这个文件中,我们可以了解一些编制任务调度文件的基本规则以及相关技巧。如果管理员能够把这个文件吃透,那么离任务调度专家也就不远了。

  1、任务调度计划文件怎么取名。crontab是系统的一个任务调度文件。可以看到这个文件的名字是以cron为前缀的。为此,我们一看到这个文件就可以非常直观的了解到这就是一个任务调度文件。故系统管理员在建立自己的任务调度文件的时候,最好也能够以这个cron前缀开头,以提高文件名字的可读性。另外需要注意的一点就是,在Linux系统下跟其他操作系统有一个很大的不同,计文件名字或者文件加名字都是区分大小写的。也就是说,cron与 Cron是两个不同的文件。为了防止搞混,在给文件取名的时候,最后都采用小写的文件名字。免得后续调用这个文件的时候,出错。

  2、为调度计划添加相关的说明。俗话说,好记性不如烂笔头。也许管理员刚开始记得这个任务调度文件是为什么建立的。但是,一年两年之后,或者以后有别人来接替你的工作,就不知道这个文件到底有什么用。为此,对任务调度文件进行一定的备注说明是必要的。系统任务调度文件就利用#符号,来进行配置。对于这备注,笔者再提一个小建议。在进行备注时,最好采用英文。如果你英文真的很差,那么不妨采用拼音。也就是说,要尽量避免采用中文来进行备注。如果采用备注,在某些情况下可能会出现乱码。如通过SSH协议远程管理Linux服务器时,中文就很可能无法正常显示。

  3、任务文件需要制定程序运行的基本环境。系统任务调度文件中,就主要制定了四个基本参数。第一个是指定执行任务调度工作时所使用的 shell;第二个是制定这个命令的存放路径(或者说指定命令搜索的路径);第三个是指定是否要输出结果,上面这个例子中是要把结果输出给root用户; 第三个是指定根目录。这些任务调度工作的基本环境参数种,笔者认为需要说明的是第一个参数,即执行任务调度工作时所有使用的shell。Shell的功能就好像是一座桥梁,在用户与操作系统之间进行沟通的一座桥梁,提供基本的操作界面。如此系统管理员就可以为操作系统下达各种指令,在用户与操作系统之间形成一个互动的环境。各种操作系统都有其默认的shell。而且shell种类不同,其所支持的命令也就不经相同。为此,管理员就需要了解自己所需要运行的命令是否是当前所采用的shell所支持的。这是调度任务工作能够自动执行的关键。在必要的情况下,系统管理员需要查看一下系统所采用的shell,来判断某个命令是否在当前的shell下正常工作。管理员如果要查看其登陆系统时默认使用的shell,则可以通过echo命令来查询。如管理员可以采用 echo $shel来判断。然后根据显示的结果,在任务调度文件中正确填写所需要采用的shell。

  4、指定具体需要执行的命令。最后一步就是指定需要执行哪些调度命令。在这个步骤中,主要是要指定如下几个方面的内容。一是这些命令用该用什么帐户来执行。注意帐户的权限不同,其可以执行的命令也是不同的。为此后面的命令必须要保证这个用户有执行的权限。二是要执行的命令。上面这个例子中,run-parts命令会执行随后目录中的所有执行文件。而通常情况下,系统会从起初设置的目录中去查找相关的命令。如果在指定的搜索路径中找不到这个命令的话,那么这个任务调度就会失败。三是需要指定具体执行的周期。如每天的12点20分执行或者每月的1日12点执行或者每周执行一次等等。这个设置比较简单,只要大家根据编写规则来写不会有什么问题。这个步骤中主要要强调的是帐户的权限与命令的搜索路径两个问题。这是任务调度配置文件中的难点,也是经常容易出错的地方。管理员需要特别的注意这两方面的内容。

  二、任务调度计划文件编写建议。

  为了保障任务调度计划能够顺利的执行,那么就需要千方百计的保证这个计划文件的准确性。而要做到这一点,对于刚接触这个任务调度计划的人来说,可能比较难。为此,笔者提一些小建议,可以帮助大家提高这个任务配置文件的准确性。

  1、任务调度计划的帐户与当前帐户最好一致。也就是说,管理员需要利用某个用户来执行任务调度工作,则最好以这个用户登录系统然后建立调度任务计划文件。如此做的好处就是可以在建立任务调度文件时,先运行一下相关的命令,看看其是否具有执行这项作业的权限。这就可以防止因为权限不匹配而导致调度任务计划不能够执行。

  2、在编写任务调度计划之前,最好先运行一下这个命令。因为由于shell环境、参数等等都会影响这个命令的自动执行。这就好像在数据库管理中建立视图一样,先编写查询语句再创建视图。故在编写任务调度计划文件的时候,也最好先执行命令,然后再把命令内容加入到文件中去。

  3、选择合理的运行时间。系统管理员之所以采用任务调度计划,主要有两个意图。一是让系统自动执行某个作业,以节省管理员操作的时间;二是在一个特定的时刻,如午后12点运行某个作业,以错开服务器的运行高峰时间。故在制作这个任务调度计划的时候,为任务调度工作安排一个合适的运行时间就至关重要