1、Solaris系统管理第四部分第四部分 自动化管理自动化管理1.系统资源的定时调用系统资源的定时调用 计划任务,是任务在约定的时间执行已经计划好计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思。在的工作,这是表面的意思。在UINX中,我们经常中,我们经常用到用到 cron 服务来完成这项工作。服务来完成这项工作。cron服务可以服务可以根据配置文件约定的时间来执行特定的作务。比根据配置文件约定的时间来执行特定的作务。比如我们可以在配置文件中约定每天早上如我们可以在配置文件中约定每天早上4点,对点,对httpd 服务器重新启动,这就是一个计划任务;服务器重新启动,这就是一个计划任
2、务;1.系统资源的定时调用系统资源的定时调用 可以使用可以使用crontab将系统设定在每天、每周将系统设定在每天、每周和每月的某个时刻自动运行某个命令或者和每月的某个时刻自动运行某个命令或者应用程序,实现系统资源的循环定时调用。应用程序,实现系统资源的循环定时调用。在不需要人工干预的情况下,在不需要人工干预的情况下,还可以设定还可以设定好将系统执行信息记录在某个文件之中,好将系统执行信息记录在某个文件之中,我们定期查看这些文件,以了解系统执行我们定期查看这些文件,以了解系统执行情况。可以使用情况。可以使用 crontab 命令来调度例程命令来调度例程系统管理任务,使其每日、每周或每月执系统管
3、理任务,使其每日、每周或每月执行一次。行一次。1.系统资源的定时调用系统资源的定时调用每日每日 crontab 系统管理任务可能包括以下内容:系统管理任务可能包括以下内容:从临时目录中删除几天前的文件从临时目录中删除几天前的文件执行记帐摘要命令执行记帐摘要命令使用使用 df 和和 ps 命令捕获系统快照命令捕获系统快照执行每日安全监视执行每日安全监视运行系统备份运行系统备份每周每周 crontab 系统管理任务可能包括以下内容:系统管理任务可能包括以下内容:重新生成重新生成 catman 数据库以供数据库以供 man-k 命令使用命令使用运行运行 fsck-n 命令以列出任何磁盘问题命令以列出
4、任何磁盘问题每月每月 crontab 系统管理任务可能包括以下内容:系统管理任务可能包括以下内容:列出在特定月份中未使用的文件列出在特定月份中未使用的文件生成每月记帐报告生成每月记帐报告此外,用户还可以调度此外,用户还可以调度 crontab 命令以执行其他例程系统任务,例命令以执行其他例程系统任务,例如发送提醒和删除备份文件。如发送提醒和删除备份文件。1.系统资源的定时调用系统资源的定时调用 crontab 仅仅是一个文本文件,可以用任何仅仅是一个文本文件,可以用任何 UNIX 编辑器编辑它。它可以包含四种代码行:编辑器编辑它。它可以包含四种代码行:空行、注释、环境变量设置和命令。空行、注释
5、、环境变量设置和命令。空行和注释空行和注释文件中的空行和多余的空格被忽略。空行和空文件中的空行和多余的空格被忽略。空行和空格有助于提高格有助于提高 crontab 的可读性,使的可读性,使 crontab 组组织有序。还可以使用注释对每个作业的时间表和织有序。还可以使用注释对每个作业的时间表和用途加以说明。要想创建注释,只需在一行的开用途加以说明。要想创建注释,只需在一行的开头加上一个井号头加上一个井号(#)。1.系统资源的定时调用系统资源的定时调用环境变量和命令环境变量和命令cron 最终使用一个最终使用一个 shell 执行每个命令。可以通过环境执行每个命令。可以通过环境变量修改或定制变量
6、修改或定制 shell 的行为。的行为。cron 预定义了五个环境变量:预定义了五个环境变量:PATH 的默认值是的默认值是/usr/bin:/bin。SHELL 预设置为预设置为/bin/sh。LOGNAME 初始化为初始化为 crontab 所有者的用户名。所有者的用户名。HOME 设置为设置为 crontab 所有者的主目录,比如所有者的主目录,比如/home/joe。MAILTO 设置为设置为 crontab 所有者的名称。所有者的名称。要想修改这些默认值或设置任何变量,只需在要想修改这些默认值或设置任何变量,只需在 crontab 中设置适当的环境变量。中设置适当的环境变量。1.系统
7、资源的定时调用系统资源的定时调用cron 概念概念 cron 守护进程是一个由实用程序和配置文件组成的小型子系统,守护进程是一个由实用程序和配置文件组成的小型子系统,在几乎所有类在几乎所有类 UNIX 系统上都可以找到某种风格的系统上都可以找到某种风格的 cron。cron 的组的组件包括守护进程本身件包括守护进程本身;一组系统范围的配置文件一组系统范围的配置文件;一组针对特定用户的一组针对特定用户的配置文件配置文件;一个用来添加、修改和删除用户配置文件的实用程序一个用来添加、修改和删除用户配置文件的实用程序;以及以及一个简单的访问控一个简单的访问控 制设施。一般来说,制设施。一般来说,cro
8、n 配置文件或配置文件或 cron 作业作业的列表被称为的列表被称为 crontab 或或 cron 时间表。时间表。守护进程守护进程 cron 连续运行,每分钟检查一次配置文件中的修改。连续运行,每分钟检查一次配置文件中的修改。cron 读取系统范围的和针对用户的读取系统范围的和针对用户的 crontab、相应地更新事件调度计划并、相应地更新事件调度计划并执行这一分钟内应该执行的所有命令。这个守护进程还捕捉每个作业执行这一分钟内应该执行的所有命令。这个守护进程还捕捉每个作业的输出的输出(如果有输出的话如果有输出的话),并把结果通过电子邮,并把结果通过电子邮 件发送给作业的所有件发送给作业的所
9、有者。者。1.1 配置文件/usr/sbin/cron 守护进程检查守护进程检查/var/spool/cron/crontabs文件来查看某个指定命令被文件来查看某个指定命令被调度执行的时间。如果命令已经调度,守护进程就会执调度执行的时间。如果命令已经调度,守护进程就会执行它们。行它们。查看查看crontab文件内容:文件内容:#crontab l10 3*/usr/sbin/logadm15 3*0/usr/lib/fs/nfs/nfsfind1.1 配置文件 这个格式的前一部分是对时间的设定,后面一部分是要执这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,
10、可以把这些命令写到行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个时间的设定我们有一定的约定,前面五个*号代表五个数号代表五个数字:字:*用户名用户名 命令命令 文件(文件(file)中的每一行格式为)中的每一行格式为minute hour day-of-month month-of-year day-of-week username commands1 2 3 4 5 6 71.1 配置文
11、件cron 配置计划任务的书写格式配置计划任务的书写格式 分钟分钟 小时小时 日日 月月 周周 用户名用户名 命令命令10 3 */usr/sbin/logadm说明:说明:第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从第一段应该定义的是:分钟,表示每个小时的第几分钟来执行。范围是从0-59第二段应该定义的是:小时,表示从第几个小时来执行,范围是从第二段应该定义的是:小时,表示从第几个小时来执行,范围是从0-23第三段应该定义的是:日期,表示从每个月的第几天执行,范围从第三段应该定义的是:日期,表示从每个月的第几天执行,范围从1-31第四段应该定义的是:月,表示每年的第几个月
12、来执行,范围从第四段应该定义的是:月,表示每年的第几个月来执行,范围从1-12第五段应该定义的是:周,表示每周的第几天执行,范围从第五段应该定义的是:周,表示每周的第几天执行,范围从0-6,其中,其中 0表示表示星期日。星期日。每六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这每六段应该定义的是:用户名,也就是执行程序要通过哪个用户来执行,这个一般可以省略;个一般可以省略;第七段应该定义的是:执行的命令和参数。调用的时候记得写出命令的完整第七段应该定义的是:执行的命令和参数。调用的时候记得写出命令的完整路径路径1.1 配置文件 若要若要20分钟执行一次某个任务,可以这样写:分钟
13、执行一次某个任务,可以这样写:0,20,40*command 若要若要5分钟执行一次某个任务,可以这样写:分钟执行一次某个任务,可以这样写:0,5,10,15,20,25,30,35,40,4,50,55*command solaris下的下的crontab和和linux下不一样,下不一样,linux支持支持*/5 表示每表示每5分钟一次分钟一次*/20 表示每表示每20分钟一次分钟一次而而solaris不支持不支持1.1 配置文件例例1:在每天的早上:在每天的早上8点点30分重新启动机器,就可以在分重新启动机器,就可以在/var/spool/cron/crontabs/root中加入下面的两
14、句,第一句就注释中加入下面的两句,第一句就注释,以以#号开始,后面写一个自己能知道这是什么任务的备注;号开始,后面写一个自己能知道这是什么任务的备注;#reboot OS30 8*root/sbin/reboot例例2:每天早上每天早上6点点 0 6*echo Good morning./tmp/test.txt/注意单纯注意单纯echo,从屏幕上看不到任何输出,因为,从屏幕上看不到任何输出,因为cron把任何输出都把任何输出都email到到root的信箱了。的信箱了。例例3:每小时:每小时 0*echo Have a break now./tmp/test.txt1.1 配置文件例例3:晚上
15、:晚上11点到早上点到早上8点之间每两个小时,早上八点点之间每两个小时,早上八点 0 23-7/2,8*echo Have a good dream:):)/tmp/test.txt例例4:每个月的:每个月的4号和每个礼拜的礼拜一到礼拜三的早上号和每个礼拜的礼拜一到礼拜三的早上11点点 0 11 4*1-3 command line例例5:1月月1日早上日早上4点点 0 4 1 1*command line1.2 编辑crontab 文件cron服务每分钟不仅要读一次服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次内的所有文件,还需要读一次/var/spool/c
16、ron/crontabs,因此我们配置这个文件也能运用因此我们配置这个文件也能运用cron服务做一些服务做一些事情。用事情。用crontab配置是针对某个用户的,而编辑配置是针对某个用户的,而编辑crontab是针对系统的任务。是针对系统的任务。Crontab命令:命令:用法用法:crontab file|-e|-l|-r usercrontab l:列出当前用户的列出当前用户的crontab文件。文件。crontab l username:列出指定用户的列出指定用户的crontab文件。(文件。(root用户)用户)crontab e:编辑当前用户的编辑当前用户的crontab文件。文件。c
17、rontab e username:编辑指定用户的编辑指定用户的crontab文件。(文件。(root用户)用户)crontab r:删除当前用户的删除当前用户的crontab文件。文件。crontab r username:删除指定用户的删除指定用户的crontab文件。(文件。(root用户)用户)1.2 编辑crontab 文件编辑方法:编辑方法:(1)直接编辑直接编辑/var/spool/cron/crontabs/下对应用户的下对应用户的crontab文件,如文件,如/var/spool/cron/crontabs/root文件。文件。(2)使用命令使用命令 crontab-e,Ct
18、rl+D是保存退出编辑模式,是保存退出编辑模式,Ctrl+Z是不保是不保存退出编辑模式。一旦存退出编辑模式。一旦Ctrl+D会将原有会将原有crontab内容全部内容全部replace,一定要小,一定要小心操作。心操作。注意:如果不能编辑注意:如果不能编辑crontab文件,请检查文件,请检查/etc/cron.d/cron.allow中中是否有当前用户,同时确保是否有当前用户,同时确保/etc/cron.d/cron.deny中没有你现在使用中没有你现在使用的账户。的账户。编辑完毕,需要重新启动编辑完毕,需要重新启动cron服务,或者让服务,或者让cron服务重新读取使配服务重新读取使配置文
19、件生效。置文件生效。1.3 cron自动调用服务/usr/sbin/cron进程进程Solaris 9:服务名:服务名:/etc/init.d/cron启动服务:启动服务:/etc/init.d/cron start停止服务:停止服务:/etc/init.d/cron stopSolaris 10:服务名:服务名:svc:/system/cron启动服务:启动服务:svcadm enable cron停止服务:停止服务:svcadm disable cron重启服务:重启服务:svcadm restart cron重读配置文件重读配置文件:svcadm refresh cron启停启停cron
20、进程:进程:1.先杀掉先杀掉cron进程,可以用进程,可以用ps ef|grep cron 得出得出id号,号,kill-9 PID2.rm/etc/cron.d/FIFO 3./usr/bin/cron启动进程启动进程2.系统资源一次性定时调用系统资源一次性定时调用 at命令,可以使系统在以后的某个时刻执行一项命令或程序,从而实命令,可以使系统在以后的某个时刻执行一项命令或程序,从而实现系统资源的调用。现系统资源的调用。at命令格式命令格式at-m time dateat命令参数:命令参数:-m执行完后给执行用户邮件通知。执行完后给执行用户邮件通知。time执行命令的时间,以小时或分钟表示。
21、执行命令的时间,以小时或分钟表示。data执行命令的时间,以天数表示。执行命令的时间,以天数表示。操作说明:在操作说明:在 at 提示符下,键入要执行的命令或脚本,每行一个。提示符下,键入要执行的命令或脚本,每行一个。通过在每行结尾处按回车键,可以键入多个命令。通过在每行结尾处按回车键,可以键入多个命令。按按 Ctrl-D 组合键,组合键,以退出以退出 at 实用程序并保存实用程序并保存 at 作业。作业。at 作业将被分配一个队列编号,作业将被分配一个队列编号,它也是该作业的文件名。退出它也是该作业的文件名。退出 at 实用程序时将显示该编号。实用程序时将显示该编号。2.系统资源一次性定时调
22、用系统资源一次性定时调用2.at命令应用实例命令应用实例(1)创建定期执行的任务创建定期执行的任务在早上在早上7:30删除删除/home/goodcjh/*.tmp文件的任务:文件的任务:$at-m 7:30at rm/home/goodcjh/*.tmpat Press Control-Djob 897355800.a at Thu Jul 12 730:00 2008稍后用户稍后用户goodcjh到一封确认已执行到一封确认已执行 at 作业的电子邮作业的电子邮件。件。Your“at”job“rm/home/goodcjh/*.tmp”completed.2.系统资源一次性定时调用系统资源一
23、次性定时调用(2)验证验证at命令命令要验证您是否已创建了要验证您是否已创建了 at 作业,请使用作业,请使用 atq 命令。在命令。在以下示例中,以下示例中,atq 命令确认已将属于命令确认已将属于 goodcjh 的的 at 作业作业提交至队列。提交至队列。$atqRank Execution Date Owner Job Queue Job Name1st Jul 12,2008 19:30 goodcjh 897355800.a a stdin2nd Jul 14,2008 23:45 goodcjh 897543900.a a stdin3rd Jul 17,2008 04:00 g
24、oodcjh 897732000.a a stdin2.系统资源一次性定时调用系统资源一次性定时调用(3)显示显示 at 作业作业以下示例显示以下示例显示 at-l 命令的输出,该输出提供有关用户命令的输出,该输出提供有关用户已提交的所有作业的状态信息。已提交的所有作业的状态信息。$at-l897543900.a Sat Jul 14 23:45:00 2008897355800.a Thu Jul 12 19:30:00 2008897732000.a Tue Jul 17 04:00:00 2008以下示例显示使用以下示例显示使用 at-l 命令指定单个作业时所显示的命令指定单个作业时所显
25、示的输出。输出。$at-l 897732000.a897732000.a Tue Jul 17 04:00:00 20082.系统资源一次性定时调用系统资源一次性定时调用(4)删除删除at命令建立的任务命令建立的任务在以下示例中,用户要删除计划在在以下示例中,用户要删除计划在 7 月月 17 日凌晨日凌晨 4 点点执行的执行的 at 作业。首先,该用户显示作业。首先,该用户显示 at 队列,以找到作业队列,以找到作业标识号。然后,用户从标识号。然后,用户从 at 队列中删除此作业。最后,该队列中删除此作业。最后,该用户验证是否已从队列中删除此作业。用户验证是否已从队列中删除此作业。$at-l8
26、97543900.a Sat Jul 14 23:45:00 2003897355800.a Thu Jul 12 19:30:00 2003897732000.a Tue Jul 17 04:00:00 2003$at-r 897732000.a使用命令验证一下任务是否删除了:使用命令验证一下任务是否删除了:$at-l 897732000.aat:858142000.a:No such file or directory2.系统资源一次性定时调用系统资源一次性定时调用3.安全应用安全应用at命令命令应当限制所有用户使用应当限制所有用户使用at命令。通过命令。通过/etc/cron.d目录下的目录下的at.deny文文件,我们可以控制使用件,我们可以控制使用at命令的用户。这个文件与用户名相命令的用户。这个文件与用户名相 关,一个关,一个用户名在文件中列为一行。凡是列入这个文件的用户,都禁止使用用户名在文件中列为一行。凡是列入这个文件的用户,都禁止使用at命令。系统安装好后,命令。系统安装好后,at.deny就已经默认存在了。它包含下列用户就已经默认存在了。它包含下列用户名:名:daemonbinsmtpnuucplistennobodynoaccess超级用户可以编辑超级用户可以编辑at.deny文件,以增加和删除用户。每行一个用户文件,以增加和删除用户。每行一个用户名。名。