目次 HELP


5.スクリプト


本ソフトでは、オートシャットダウン時やスケジュール運転での停止前などいくつかのタイミングでスクリプトが実行できます。 スクリプトは、各タイミングごとに必要な処理を upsrc(/usr/ups/bin/upsrc)ファイルの {  }内に記述します。 (初めからスクリプトに記述された内容はむやみに消さないでください。スクリプトを消すことにより実行内容が変更します)。

スクリプトの実行レベル

スクリプト実行のタイミングを実行レベル(rclevel)といいます。
実行レベルには以下の7段階があり、1つのレベルを指定すると、それ以下の全てのレベルでスクリプトが実行されます。
またこれ以外にスクリプトには9、11、12、13のステートがあり、これに関してはレベルに関係なく実行します。
rclever:7 スケジュール運転での停止前処理
rclever:6 スタートアップ時
rclever:5 復電時
rclever:4 スケジュール運転での停止時
rclever:3 停電発生時
rclever:2 回復不能とみなされたとき(赤色警報)
rclever:1 オートシャットダウン時
以下に、各タイミングと実行レベルの関係を示します。○内の数字が実行レベルです。


電源異常発生時


スケジュール運転時

スクリプトは、設定した実行レベル以下の各タイミングで実行されます。 たとえば、実行レベルを3に設定した場合は、「停電発生時」「回復不能とみなされたとき」 「オートシャットダウン時」の各タイミングでスクリプトが実行されます。 具体的には、各タイミングで実行レベルが引数として渡されスクリプトが実行されます。
3(停電発生時):/usr/ups/bin/upsrc 3
2(回復不能とみなされたとき):/usr/ups/bin/upsrc 2
1(オートシャットダウン時):/usr/ups/bin/upsrc 1


実行レベルの指定


スクリプトの実行レベルは、[設定の変更]画面の[実行レベル]で設定します。 上位のレベルは下位のレベルを含むので、処理を行いたい最上位のレベルを選択します。


[設定の変更]画面は、メインメニュー画面(/usr/ups/bin/xinst <Return>)で [設定の変更]ボタンをクリックすると表示されます。詳細については、 「動作条件の設定」 を参照してください。


スクリプトの記述

スクリプトはupsdデーモンにより以下のコマンドで実行します。

/usr/ups/bin/upsrc  (ステート) (オプション1) (オプション2)

スプリプトはステートにより実行内容が異なりますので、 ステートを意識した記述にしてください。初期の記述内容はステートを意識した記述となっています。
ステート9〜13は以下の場合upsdデーモンからコマンドが発行されます。 (ステート9〜13のスクリプトをカスタマイズした場合、マニュアルに記載された動作と異なる動きとなりますのでご注意ください。)

  STATE13:20日連続運転した場合のメール機能
  STATE12:STATE1〜7の場合のトラップ、メール機能
  STATE11:自己診断が終了した場合(機能は未定義)
  STATE9:UPS故障が発生した場合のトラップ、メールの機能

スクリプトの記述については、以下の例を参考にしてください。 スクリプト内部で引数を判断して、実行レベルに合った処理を行うようにします。

#!/bin/sh
#
#
#$Header: UPS Shutdown,v 3.0 03/05/27 20:48:17 root Rel40 $ ZIRION NETWORKS;
#
#
#-------------------------------------------------------------------
#          # easytrap                ... Send snmp trap to assigned hosts.
#          # easytrap -u            ... Send udp trap which can be recognized by xups
#            
                 
               beyond some routers.
#          # upsmail ... Send mail to assigned hosts.
#
#send snmp trap & E-mail
#
#           STATE=1           
      ... shutdown
#           STATE=3           
      ... power failure
#           STATE=5           
      ... restored
#           STATE=6           
      ... starting-up
#           STATE=9           
      ... other alarms
#           STATE=12                ... including 1-6
#
_send_trap()
{
    if [ "$STATE" = "12"]; then
       STATE=$OPTION2
   fi
if [ -x INSTALL_DIR/bin/easytrap ]; then if [ "$STATE" ="9" ]; then INSTALL_DIR/bin/easytrap -t 6 $OPTION2 $OPTION1           >/dev/null 2>&1    else         INSTALL_DIR/bin/easytrap $STATE $OPTION1                    >/dev/null 2>&1 fi fi if [ -x INSTALL_DIR/bin/upsmail ]; then INSTALL_DIR/bin/upsmail -sj -R $STATE $OPTION2           >/dev/null2>&1 fi } #send hello E-mail _send_hello_mail() { if [ -x INSTALL_DIR/bin/upsmail ]; then INSTALL_DIR/bin/upsmail -sj $STATE $OPTION2           >/dev/null2>&1 fi } # shutdown process (シャットダウン処理) _do_shutdown() {   シャットダウン時に何か処理を入れるときは、こちらにコマンドを入れてください。     _send_trap #shutdown     SYSNAME=`uname -s`     cd / if [ "$SYSNAME" ="HI-UX" ]; then       /etc/shutdown >/dev/console 2>&1     else       /etc/shutdown -h -y now>/dev/console 2>&1 fi } # pre-shutdown process (シャットダウン前処理) _pre_shutdown() {   データベースの終了処理など     _send_trap }   # power trouble occurred (停電検知処理) _detect_power_fail() {   ファイルのバックアップ処理など     _send_trap } _recovered() {     _send_trap }   #main routine PATH=/bin:/sbin:/usr/bin:/usr/sbin:/etc:.   #parameters STATE=$1 OPTION1=$2 OPTION2=$3 OPTION3=${4:-`date+"%y%m%d%H%M"`}   #execute case$STATE in 1)_do_shutdown;; 2)_pre_shutdown;; 3)_detect_power_fail;; 5)_recovered;; 9)_send_trap;; 12)_send_trap;; 13)_send_hello_mail;; esac exit 0

スクリプトをカスタマイズする場合、古いバージョンのボーンシェルでは、上記例の関数タイプが使用できないものもあります


目次 HELP