一、合理定位任务调度程序的输出结果。
任务调度程序默认情况下会输出两种类型的结果信息,分别为运行的结果(如果命令中定义要输出一定的结果)和错误信息(如没有正常运行这个任务计划的错误提示)等等。对于这些结果信息,系统管理员需要明确的是两个内容,分别为是否需要这些信息,以及将这些信息存放到什么地方。
在Linux操作系统,即可以显示正常的结果信息,而不显示错误信息;也可以两个都显示等等。甚至可以什么信息都不显示。具体需要哪些信息,就需要根据系统管理员的需要来定义了。如只要正确的结果信息,那可以节省阅读量,但是可能会忽视一些系统的错误信息。一般情况下,如果Linux操作系统作为,而这个任务调度又关系到比较重要的任务,如数据备份等等。此时最好需要向系统管理员同时汇报正确的结果信息(如什么时候开始比分,历时多少时间,备份文件的大小等信息)以及一些错误信息(包括用户自定义与系统默认的错误信息)。由于Linux在企业中不会很多,所以即使加上这些错误信息或者正常的结果信息,其最终的阅读量也不会增加多少。而如果在普通的客户端系统来说,则可以只汇报一些必要的信息,如任务计划是否正常完成等等。因为客户端数量比较多,如果反应比较齐全的信息时,系统管理员也没时间看。可能是直接放进垃圾筒。在这种情况下,还不如只显示系统管理员比较感兴趣的内容为好。
系统管理员除了要确定显示哪些内容之外,还需要确定以什么样的方式显示。如默认情况下,系统会将执行的结果以及错误信息,以邮件的形式发送给要求执行的用户(如果邮件等信息设置无误的话)。但是系统管理员可以改变这种显示的方式。如系统管理员可能觉得每次收到一封邮件比较麻烦。如企业有100台客户端(在每台客户端上通过CRON来对重要文件进行备份),那么系统管理员每天就要收到100封邮件。这不就是变为垃圾邮件了吗?为此不少系统管理员在客户端上部署了CRON后,会更改相关的配置。如系统管理员可以将结果信息或者错误日志信息保存到本机的一个文件中。如只需要加入program >> /home/user/log.txt即可。注意,此时只是把结果信息保存到这个文件中,而不会将错误信息保存。如果在保存正常运行结果信息的同时,还需要保存错误信息的话,则系统管理员需要在这个命令后面加入2>&1。这个2>&1表示执行结果与错误信息。如果不这么定义的话,则默认情况下只是保存执行结果信息。不过有时候可能系统管理员根本不需要这些信息(虽然笔者不建议这么做,但是有些系统管理员还是对自己有盲目的自信),那么也可以屏幕掉。这个屏蔽的方法,其实笔者在以前的文章中也谈到过,就是利用系统中一个特殊的文件/del/null。当需要过滤一些屏幕上的提示信息(如正常的数据流或者错误信息),可以将相关的纪录重定向到这个文件中。为了达到这个目的,笔者采用的语句是program >/dev/null 2>&1。执行这个命令后,就是将所有的信息都重定向到这个/dev/null文件。这是系统中的一个空文件。重定向到这个文件中内容都不会保存。注意,这里必须加上2>&1这个内容。否则的话,只会屏蔽掉部分的内容,仍然会像系统管理员提示一些信息。
笔者最后强调一次,虽然系统中可以使用某些手段将crond任务计划的执行结果信息或者错误信息屏蔽掉,但是笔者一般不建议这么做。因为如果没有这些信息的话,那么系统管理员就很难判断这个任务计划是否顺利执行了。如对于完成数据备份功能的计划作业,可能需要一一去查询备份文件的属性才能够判断备份作业是否正确运行。这显然增加了维护的难度。所以,在没有充分必要的情况下,请务必保留执行结果或者错误信息。如果觉得邮件比较麻烦的话,至少可以将这些信息保存到本机的日志文件中。方便在需要的时候查看。
二、删除任务计划时慎用crontab –r 命令。
当系统管理员不再需要定期执行任务调度中定义的工作时,则可以通过crontab –r命令来进行删除。如果在使用这个命令的时候需要慎重。因为可能在同一台操作系统中设置了不同的任务调度计划。如一个计划用来备份数据库,另外一个计划用来监测邮件系统所占用的硬盘空间。此时如果系统管理员不需要监测邮件空间的那个任务计划(可能将邮件服务器移植到另外的服务器上),需要将这个任务计划删除。此时如果采用crontab –r命令来删除不需要的任务计划时,系统管理员就要后悔了。因为这个命令是删除所有的任务调度工作,即会将以上的数据库备份的任务计划也删除。但是系统管理员的本意是不想删除这个计划的。
为此在使用这个命令删除任务调度工作时,最好先使用crontal –l命令来查询当前系统中有哪些任务调度工作。并判断是否要把这些任务调度工作全部删除。如果需要全部删除或者只有要删除的那一个任务调度作业时,可以使用如上这个命令。否则的话,就不能够使用这个删除命令。如果需要删除单个的任务计划时,最好通过修改cron配置文件来完成。每一个任务调度工作计划都会在配置文件中占用一条记录。系统管理员之需要将对应的纪录删除或者注释掉即可(对于暂时不用的任务调度工作笔者建议注释掉,而不是删除)。注释掉的内容跟删除具有同等的效果,因为系统在执行时不会去考虑注释的内容。
另外系统管理员root这个特权用户可以用来管理所有用户的任务调度工作。如现在系统管理员是利用mail这个账户来管理邮件服务器,并利用这个账户建立了上面这个任务调度作业。此时系统管理员可以使用crontab –l –u mail 来查询mail用户所创建的所有任务调度工作。同理,也可以通过命令crontab –r –u mail来删除所有这个用户创建的任务调度作业。如果现在需要把这个mail账户注销掉,那么可以使用这个删除命令来一次性将这个账户对应的任务调度计划删除。如果mail、oracle等账户的持有人与root实际为同一人,即系统管理员同时担任多个角色的话,那么笔者建议采用root账户来统一管理这个任务调度计划。如果不是如此,即企业中有数据库管理员等员工来各自完成相关的维护工作,那么最好是各个用户采用自己的账户来维护。因为除非是系统管理员(特权账户),否则的话各个账户只能够维护自己的任务调度计划。这就可以给各个用户一个相对独立的环境,避免相互之间的干扰。
最后需要说明的是,在任务计划中最好不要写太过于复杂的语句。如果要实现比较复杂的功能,如将文件备份完成后需要统计备份文件的大小、备份文件的目录等信息,最好将它们写在一个脚本文件中。然后让任务调度计划运行这个脚本文件。因为在任务调度计划简短的代码中,很难执行复杂的功能。而且以后如需要调整相关功能的话,也只需要调整这个脚本文件即可。而不需要去更改原先的任务调度的代码。显然这有利于提高代码的灵活性。