IBM AIX 的自动启动和关闭脚本

自动停止和启动您的应用程序

在系统重新启动时自动启动所需的服务,这样可以免去登录到系统来手动启动这些服务的任务。在关闭系统时,可以准备好脚本,以受控的方式关闭这些服务。本文介绍了在系统重新启动或关闭时用于启动或停止应用程序的不同方法。

David Tansley, 系统管理员, Ace Europe

//ibm.com/developerworks/i/p-dtansley.jpgDavid Tansley 是一位自由作家。他有 15 年 UNIX 系统管理经验,最近 8 年使用 AIX。他喜欢打羽毛球和观赏一级方程式赛车,但是最喜欢与妻子一起开着 GSA 摩托车旅行。



2013 年 11 月 11 日

系统重新启动可能发生在白天,也可能发生在夜晚(可能由于站点停电),若此时能够让系统上运行的服务(应用程序)自动启动,则会非常有利。有时候就是这样!让服务启动可以免除您登录并亲自启动它们的额外任务,这很好。但在某些情况下,我们不希望服务启动。此时,我想到的是一个集群服务环境,可能有不同的服务遍布在几个 IBM® AIX® 主机上,这些服务需要以正确的顺序启动,以便能够正常地工作和集成。在这里,您可能需要手动按顺序启动它们。

启动和关闭方法

为了让服务自动启动,AIX 提供了(类似于其他 UNIX/Linux 操作系统)inittab 文件来实现这一点。您可以从 /etc/inittab 执行以下操作:

  • 直接从 inittab 通过发出一个要运行的命令(脚本)来启动服务。
  • 使用一个常用脚本,通常表示为 rc.local,从 inittab 调用它,它包含一个或多个要运行的命令(或调用脚本)。
  • 使用从 inittab 调用的 rc.run level 目录。

为了在系统关闭时自动关闭某个服务,AIX 提供了:

  • /etc/rc.shutdown 脚本。此文件与 rc.local 相反。在这里,放置了系统发出关闭操作时要运行的命令。

在本文中,我不会介绍 rc.runlevel 目录配置,而是打算介绍前面提到的其他进程。

为了将一个条目放进 inittab,您需要使用以下格式:

identifier : runlevel: action: command

其中:

  • identifier 是条目的惟一名称。尽量将其长度保持在 1 到 7 个字符之间。它使条目变得可读。
  • runlevel 是实际的 runlevel 数字,在到达 runlevel 时,将运行此 inittab 条目中所包含的指定命令。
  • action 是达到所需的 runlevel 时对待命令的方式,稍后您可以在这本文找到有关的更多信息。
  • command 是将要运行的实际命令。

每个条目字段用冒号 “:” 分隔。

在将条目添加到 inittab 中时,需要确保:

  • 在 inittab 中有没有错别字,如果 inittab 中有错别字,AIX 就会不明白它的含义,因而会进入一个进程循环。然后,init 命令无法正确地读取文件。
  • 标识符是绝对惟一的,否则,当重复的标识符第二次出现时,可能无法像预期一样正常运行。

如果从 /etc/rc.shutdown 调用的脚本或命令中有错别字,则存在 “语法或没有发现命令” 问题,请注意,如果使用 shutdown 命令进行调用,则会中止关闭操作。因此,请在从 rc.shutdown 调用脚本之前确保它可以正常工作。

需要了解的一些基本信息

机器已经运行的时间信息
#uptime
01:25PMup236days,3:54,

当前的运行级别:
#cat/etc/.init.state
2

上一次 AIX 重启的时间:
#who-b
systembootFeb1719:13

调整 AIX 的运行级别:
#/usr/lib/acct/fwtmp</var/adm/wtmp|greprun-level

TueMay2112:24:43BST2013

                                          run-levelh10015000621369135516

TueMay2112:25:16BST2013
                                          run-level210006201231369135516
TueMay2112:25:16BST2013

这是一个注释

在将条目添加到 inittab 中时,一定要记住,以一个冒号 “:” 开头的行是一个注释,因此,init 在读取 inittab 时将会忽略该行的其余部分。不要使用 “#”(井号)符号添加注释。但是,您可以在行的末尾对注释使用井号。

inittab 条目

让我们来看看运行脚本的 inittab 的一个条目。假设我们要运行一个将电子邮件发送给系统管理员的脚本,向系统管理员说明设备在系统启动时是可用的。

inittab 的条目如下所示:

 mailout:2:once:/usr/local/bin/mailout > / dev/null 2>&1 #mail users

上面的条目可以概括如下:

  • mailout:惟一的标识符
  • 2:当系统达到 runlevel 2 时运行此脚本(默认)
  • once:运行脚本,并且不用等待其终止;init 将继续处理 inittab。如果进程失败,init 不会尝试重新运行它。
  • /usr/local/bin/mailout:要运行的命令的完整路径和脚本名称;请注意,输出被丢弃到 /dev/dull。我们以 “#” 结束描述脚本是做什么的注释。

就完整性而言,以下是有问题的脚本:

!/bin/sh
# mailout
/usr/sbin/sendmail -t <<mayday
From:`hostname`
To: rs6admins
Subject:`hostname` P-Series is up
The AIX `hostname` is now up, please check services.
.
mayday

在上述示例中,操作部分的属性 once 表示只运行一次,但也有其他可以使用的操作。另外两个常见的操作是:重生(respawn)和等待(wait)。对于重生操作,将会执行相应的命令,但 init 不会等待该命令的完成。如果命令停止,inittab 会重新启动它,让此进程继续。所以,您应该查找一个被重生的命令,该命令几乎在所有时间都在运行。ps-ef 命令输出的 STIME 字段显示了该命令最后一次重生的时间。被重生的典型进程是 tty、cron 和数据库监控应用程序,以及基于网络文件系统(NFS)的实用工具。另一个常用操作是等待。Init 运行命令,并等待命令完成,然后再读取 inittab 文件。使用等待操作的典型进程是网络身份验证应用程序和打印、备份服务,等等。

如果需要启动的进程不是 root 所拥有的,那么只需将 su 命令作为 inittab 中的命令条目的一部分提供即可。下面的示例运行了 /home/ampter/start.sh,但首先会调用 su 命令,因此,进程是由用户 ampter 启动的。请注意,这里使用了包围了部分命令的引号:

amps:2:once:su - ampter "-c /home/ampter/start.sh" > /dev/console 2>&1

在编辑 inittab 文件时,确保在保存文件后检查了您的条目。然后,检查您所做的更改。相信我,没有人愿意搞砸 inittab。如果某人感觉对手动编辑文件没有信心,那么还有挽救的方法。AIX 提供以下实用工具:

  • chitab:修改退出的 inittab 条目
  • lsitab:列出 inittab 条目
  • mkitab:添加一个 inittab 条目
  • rmitab:删除一个 inittab 条目

停止一个重生的进程

如果您需要停止进程重生(换句话说,可能需要停止它来执行一些维护工作),首先,编辑 inittab 文件并在条目的开始处输入一条注释,这样 init 就不会读取它。下面的示例显示,通过在条目的开始处放置一个冒号,可以让 inittab 忽略该条目。

:fmc:2:respawn:/opt/db2_09_05/bin/db2fmcd #DB2 Fault Monitor Coordinator

接下来,让 init 重新读取 inittab 文件:

teinit q

现在,停止该应用程序。执行所需的任何维护。要从 inittab 重新启动进程,只需删除条目开始处的冒号即可。然后,在命令提示符下,运行下面的命令,让 init 重新读取 inittab 文件:

teinit q

现在,它将被重新启动。

rc.local 绑定

启动应用程序或在启动时运行命令的另一种常见方法是使用 /etc/rc.local 文件。在这里它是一个可执行脚本,从 inittab 文件中被调用。rc.local 文件可以包含一个或多个需要在启动时运行的定制命令。在我看来,此文件应该仅用于一次性或临时的命令执行,而不是服务启动脚本。

允许从 inittab 调用 rc.local 的一个典型条目是:

rcloc:2:wait:/etc/rc.local > /dev/console 2>&1

在上例中,操作部分是等待。也就是说,init 要等到所有的命令都被执行,然后再继续读取 inittab 文件。我使用 rc.local 文件执行临时或定制命令(如禁用分页空间或断开网络接口),因此没有提供服务的完整启动脚本。这些命令将会在我的 inittab 文件中。

关闭服务

当您发出一个 shutdown 命令时,会调用 /etc/rc.shutdown 文件,这是一个可执行的脚本。在该文件中,将会放入用于关闭您的定制服务的命令或调用脚本。当我必须关闭 AIX 系统来首次调用 /etc/rc.shutdown 文件本身时,我觉得这是一个很好的实践:

/etc/rc.shutdown

然后,我知道所有的应用程序都已正确关闭,在发出实际的 shutdown 命令之前,该命令无疑会重新运行 rc.shutdown 文件。但是,我不介意这一点。


结束语

量身定做 inittab 和关闭文件,让您可以控制自己希望以简洁的方式来启动或停止的服务或应用程序。rc.local 文件对于需要在启动时运行的一次性命令很方便。

参考资料

学习

  • AIX inittab 主页
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。

讨论

  • 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=952415
ArticleTitle=IBM AIX 的自动启动和关闭脚本
publish-date=11112013