このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

FMPServerからサーバを自動的にShutdownできませんか!?

発言者:ゆう
( Date Thursday, February 15, 2001 14:56:09 )


これまで青白G3で、OS8.6にFileMakerProServer3.0を入れて、
ファイル入れ替え時にファイル共有を細々と使用するという形式
でサーバを運用していました。 さすがにサーバ専用機ではない
ので、省エネルギー設定を使用して、深夜に週一回だけサーバの
停止・起動を行っていました。

先日、バックアップソフト(Retrospect)のバージョンアップに
合わせてOSを9.0.4にあげたところ、省エネルギー設定でサーバ
停止ができなくなってしまいました(起動はできる)。 
この問題自体は Appleに問い合わせているところですが、代わり
の機能を AppleScriptで実現しようとしたところ、これがうまく
いかないのです。

Scriptは、Finderから shut down を発行するだけなので難しく
ないと思ったのですが、実行を時間指定でしたいのでFMPサーバ
から起動する方式をとったところ、エラーもなしに無視されて
しまいます。 やはり自分の足下をすくうような命令は許され
ないのでしょうか。

ループさせて時刻をチェックするScriptも組めそうですが、CPU
負荷が心配です。 Appleからの正式回答がくるまで、他の製品や
Sharewareは購入許可されそうもありません。 時間指定でサーバ
をShutdownするいい方法はないものでしょうか。

田中求之 さんからのコメント
( Friday, February 16, 2001 11:55:57 )

直接 Shutdown を行うのではなく、shutdown を行うアプレットを起動する
という方法でうまくいきませんか?

ゆう さんからのコメント
( Monday, February 19, 2001 10:02:24 )

直接 tell application "Finder" to shut down というAppleScriptの
実行形式ファイルを起動しています

アプレットというのは、on 〜 というAppleScriptをもったファイルを
idleさせておいて、これに Eventをおくるということでしょうか?
試しにやってみましたが、idleさせ方が悪いのか、FMPサーバの方が
動けないほど負荷がかかってしまったようです

なにか大きなカン違いをしているような気がするのですが、間違って
いるのでしょうか?

田中求之 さんからのコメント
( Monday, February 19, 2001 12:30:47 )

以下のスクリプトをアプリケーションとして保存してください。その際、
「初期画面を表示しない」と「実行後、自動的に終了しない」の両方を
チェックしておきます。

そして、このアプリケーションを、ファイルメーカーのスクリプトの
AppleEvent を送信のアプリケーションを起動で実行すれば、10秒ほどで
シャットダウンが行われるはずです。

property killFlg : false

on run
  set killFlg to false
end run

on idle
  if killFlg then
    set xApp to {}
    tell application "Finder"
      set mylist to application processes
      repeat with thisP in mylist
        try
          set end of xApp to (application file of thisP) as string
        on error
        end try
      end repeat
    end tell
    
    repeat with x in xApp
      if x is not ((path to me) as string) then
        tell application x to quit
      end if
    end repeat
    
    tell application "Finder"
      shut down
    end tell
    
  else
    set killFlg to true
  end if
  return 10
end idle


ゆう さんからのコメント
( Monday, February 19, 2001 13:45:15 )

わぉ!できました!!

時間稼ぎをしてFMPサーバに処理終了を確認させた上で、FMPサーバ
を含む、Finder以外のアプリを終了させ、そこに shut downを発行
させるのですね。
単純にコマンド発行させればいいや、などという考え自体が誤り
だったというわけですね。
しかしここまで高度なワザが必要だったとは…。

これを最初に実行したときは、FMPサーバと一緒に動いてていた
Retrospectのイベントハンドラが、本体といっしょに終了して
しまったために、tell application x to quitで時間切れになって
しまいましたが、これは簡単に回避できそうです。

これでやっと深夜にサーバの停止・起動ができそうです。
ありがとうございました!!