« システムバックアップのすすめ | メイン | Webデザイン:ナビゲーションと目の動き »

ブラウザからサーバを再起動

リモートから、ホストマシン自体を再起動したい場合もある。
FileMakerのWebコンパニオンおよびWSC(WebServerConnect)はときどき、原因不明でおかしくなって反応しなくなる。本来であれば端末の前で正式な再起動の手続き(Finderメニューから再起動)をしたいところだけれど。
リモートから操作するには、リモートコントローラ系のサーバおよびクライアントソフトを使うこともできるが、利用者にある程度の知識が必要&そこそこの通信バンドがないと辛い。
そこで、なかば無理矢理的強制型いやだいやだといっても俺には通用しねいぜよい子はまねするな的方法でサーバを再起動する。

要するにWebブラウザ+Webサーバ+PHPを使ってマシンを再起動するにはということなんだけれど。
通常、PHPはnobadyやwwwユーザーといった、特別な権限の与えられていないユーザープロセスによって起動されているため、そこから直接、マシンの再起動や、シャットダウン等、管理的コマンドを操作することができない。

単純に、

<?php
exec("/sbin/reboot");
?>

とやっても、ダメである。
そこで、まず、rootの権限をもって実行できるコマンドを作成する。
つまるところ、setuidという奴である。

適当なスクリプトで、rebootするコマンドを書く。注意したいのは、Perlはカーネルの設定によって、setuidができない場合が多い。Mac OS X 10.2.6もそうである。setuidしたPerlスクリプトを実行しようとすると、エラーメッセージが出る。
なので、今回はshで書いた。(といっても1行だけど)

で、そのスクリプトのオーナーをrootにし、chmod 4755等で、sビットを立てる。
そのスクリプトは、ブラウザから見える所に置いておくととても危険なので、apacheのDocumentRootからはずれた所におくべし。
で、そのスクリプトをphpからexecすれば、そのプロセスはroot権限によって動作するので、ブラウザから再起動できるようになる。

<?php
exec("/user/home/foo/reboot.sh"); // setuidしたスクリプトを起動
?>

もちろん、誰でもそのスクリプトにアクセスできないように、2重3重の制限を設けておくことを忘れないように。

本体の▲ボタンによる強制再起動よりは若干安全だが、本当であればFinder経由で再起動したい。
しかしながら、Webブラウザ経由で、Finderの再起動を実行する方法はまだ見つかっていない。コマンドラインから、openコマンドでアプリなりファイルなりを開けるから、そこでAppleScriptの実行形式を選べばいいのだろうけれど、AppleScriptでマシンを再起動する方法が分かってない。
どーも昔からAppleScriptが苦手。文法がむずかしすぎる。
別にAppleScriptじゃなくても、再起動するアプリでもいいんだけど。

コメントを投稿

2008年10月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

最近のコメント

小優 on 日々の記録: DELL4600Cで
よしぞう on 日々の記録: 4600C 表記の対
よしぞう on 日々の記録: 4600C 表記の対
on MySQL後で調べるメモ: DB接続後 目的のS
on 日々の記録: 「無くなった留め具」
on JavaScriptでクロスドメイン: >しかし、こういう小
junp on iMovieで静止画を取り込むと荒い: すいません困ってます
う〜ん・・・ on 素朴な疑問: にょうをした、きたな
困ってました on ATOKとIME2005が勝手に切り替わる問題: 何故か勝手に切り替わ
go on 日々の記録: 4600C、同じ症状

アーカイブ