• ベストアンサー

PHPスクリプトからサービスの再起動

お世話になります。 PHPスクリプトからリナックスのsquidのサービスを 再起動したいのですが、これは可能なんでしょうか? php4.3.9 apache2.0.52 rhl9 よろしくお願いします。

  • PHP
  • 回答数6
  • ありがとう数11

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

かなり苦労しているようですが、まだゴールまでの道のりは近くは無いかもしれません。ここで諦めるのでしたらそれっきり、しぶとく追求するのでしたらマスターまで(笑。 それはさておき、 PHPの質問と言うよりはLinuxの話になってしまいますが、、、 > ウインドウズなら簡単に、この人は777、このグループは666とか、視覚的にわかるじゃないですか? これはLinuxでも同じです。これはファイルの実行(アクセス)権限です。sudoで実行権限を与えるのはコマンドレベルです。 Linux(UNIX)では、もともと多くの人がログインしてコマンドを実行出来るように設計されています。rootでは全てのコマンドが実行出来ます。一般ユーザではcdとか、mkdir、viなどのコマンドは実行出来ますが、ユーザを追加する権限のuseraddや、サーバを再起動するコマンド実行権限はありません(一般ユーザが勝手にサービスを止めたら困りますよね)。当然、apacheにもサーバの実行権限等は与えられていないのですが、特別に与える事が出来るコマンドがsudoです。誰と誰にはこの管理権限を委譲する、と言う事が出来る訳です。 sudoの設定は、/etc/sudoers のファイルを編集する事で出来ます。当然root権限でないと編集出来ません。ここでapacheに実行権限を与えれば、与えられたコマンドが実行出来ます。 ところでなぜPHPスクリプトからサービスの再起動をしたいのですか?一般ユーザに再起動させる事は通常考えられませんが。リモートからWEB経由で管理したいと言うのでしたら、webminあたりを使ったらどうでしょうか?webminならsquidの再起動ぐらいはワンタッチですよ。

123daa
質問者

お礼

ありがとうございます。 まだまだ諦めるつもりは、毛頭ございません。 ただ、疲れているのは確かです。 LINUXは2ヶ月前から触りだしました。なんかよくわからないけど、RPMは成長するのに障害だろうと重い、tarボールのをダウンロードして、わからないなりにやってます。 今度は、DDNS使ってサーバーも公開してみようと思ってます。 ウインドウズだって最初はまったくわからなかったですもん。LINUXだって一緒ですよね。ただ・・ハードルは高すぎますが(TT PHPのスクリプトから再起動させたい理由ですが、 会社の内部のFWにソニックウォールを使ってまして、これにはコンテンツフィルタってのがあります。 まぁ有害サイトをとめるだけなんですが、実は日本語のエロサイトは全くノーチェックなんですね。 営業マンが出張するたびにデリヘルあさりまくりみたいな。 てっきり信頼してたのに・・ってことで、コンテンツフィルタ料を払うのをやめ、ログからうち専用のフィルタリストを作ろうと。もちろん、フリーのリストも取り込みますが。 で、squidのurl_regexを使ってブロックするのですが、新しいURLを登録するとこやつを再起動しないと反映しないのです。なんで、再起動する必要があります。 ただ、WEBMINってヤツでも可能なら問題ありません。実現できることがまず第一ですから。 WEBMINやってみます。 でも・・せっかく色々と教えてもらったので、PHPスクリプトから実現できるようには頑張ります。

その他の回答 (5)

回答No.6

5番の方が書かれている通り、visudoでやらないとまずいですね(笑。 visudoはviがある程度使えないと若干苦労しそうですね。 とは言え、Linuxでサーバ管理となるとviは避けて通れないでしょうから、頑張って下さい。 ところで、webminはほとんどのディストリでデフォルトでインストールされる程、重宝する管理ツールですが、一部設定出来ないアプリもあったりします。管理者のIPアドレスが固定なら、それのみで設定出来るようにした方が良いと思います。suduでApacheに権限委譲するよりはこちらの方が安全と思います。sudoで対応させるなら、せいぜい/sbin/squidだけを有効にする程度じゃないでしょうか。

123daa
質問者

お礼

お世話になります。 WEBMINで再起動をかけることができました。 初めて使うツールなんですが、便利ですね。 とはいえ、私の知識は発展途上なので使用は控えます。 visudoはこれからぼちぼちと勉強していきます。 ちなみにviは使用できます。 昔ある超マイナーな言語をたしなんでいたのですが、 その言語のエディタと90%同じなんですよ。 ありがとうございました。

123daa
質問者

補足

お世話になります。ご報告です。 無事PHPから再起動できました。 visudo nobody ALL=NOPASSWD:/usr/local/squid/sbin/squid -k reconfigure php-script system("sudo /usr/local/squid/sbin/squid -k reconfigure") となりました。 ありがとうございました。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.5

下の方も書かれてますが、123daaさん( (^^; )のやりたい事はsudoを使えば非常に簡単に実現出来ます。 が、私もなんでそんな事したいの?って思いますよ。 一応sudoに関する質問に答えると、rootでログインし、 visudo ってコマンドをうちます。 すると sudoを編集出来ます。 (下の方が書かれてる通り、sudoersを直接編集してもいいですが、これは敬遠されている方法です。やめた方が無難です。) そこに下記のように、httpユーザー(nobodyと仮定します)が実行したいコマンドを羅列していきます。 nobody ALL = NOPASSWD: /usr/sbin/useradd,/usr/sbin/userdel,/bin/rm,/bin/chmod,/bin/chown,/bin/mkdir,/bin/cp,/usr/bin/pas swd,/sbin/squid (おお…危険な設定(笑)) こうすればブラウザから、ユーザーを追加したり、消したり出来てしまいます… だからやめた方が無難ですけどね(^^;

123daa
質問者

お礼

皆様、本当にありがとうございます。 本番に実装するのは別として、一度やってみます。 危険なことはしないに越したことないし、WEBMINで実現できるならそれでOKですので。 月曜日以降になりますが、結果は報告いたします。

回答No.3

他の方も書いていますが、exec()かsystem()あたりでいけます。但し、apacheに実行権限がなえればいけません。 実行権限を与えるにはsudoを使います。 sudoを使ってApacheに実行権限を与える時注意すべきは実行しているのがapacheなのか、nobodyなのか、それ以外なのか、と言う事です。また、Apacheに実行権限を与えると言う事はかなり大きなセキュリティホールになる可能性もよく考慮して下さい。 追加ですが、cd /usr/local/squidと言うのは有効にはならないのではないかと思います。また、system関数等ではコマンドは絶対パスで記載する必要があります。

123daa
質問者

お礼

ありがとうございます。 実行権限の与え方を勉強しないと、難しいですねぇ。 まだリナックスはやり始めたばかりで、全然わかってないのです。ウィンドウズならある程度はわかるのですが・・ 例えば、ひとつのフォルダにウインドウズなら簡単に、この人は777、このグループは666とか、視覚的にわかるじゃないですか? それが、黒画面になると・・・最近吹き出物が増えましたよ。 cd /usr/local/squidと書くと、そんなんありませんって返ってくるので、フルで書くと、動かないし。 実行権限のところ、勉強します。

  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.2

上手く動かないのは、/sbin/以下のコマンドにたいして、httpのユーザーが実行権を持たないからではないですか? (まあルート専用コマンドなので当たり前ですけど(^^;) sudo でhttpユーザー(何もしてないようでしたら多分nobody)に実行権を与えれば上手く動くと思いますよ。

123daa
質問者

お礼

ありがとうございます。 実行権限の与え方がよくわからないので、sudoで試しました。 exec("sudo ps -ax",$a); でプロセスのリストを出すとこまでいったのですが、 exec("sudo /usr/local/squid/sbin/squid -k shutdown") とすると、実行できませんってでます。 apache2/htdocsにtest.phpとして、ルートでログオンしてphp test.phpで駄目です。 rootでログオンして、cd / の /usr/local/squid/sbin/squid -k shutdown だと 動くのですが。 根本的なところからの知識不足なので、いろいろと調べてるのですが・・・なかなか難しいですね。

  • ken_2004
  • ベストアンサー率25% (1/4)
回答No.1

exec("再起動コマンド"); これで、phpからLinuxにコマンドを実行させるとできると思います。

参考URL:
http://jp2.php.net/manual/ja/function.exec.php
123daa
質問者

お礼

ありがとうございます。 一応試したのですが、上手いこと動きません。 実際には cd /usr/local/squid ./sbin/squid -k shutdown ./sbin/squid とやりたいのですが、このサンプルスクリプトがある URL等はご存知ありませんか? お暇なときで結構ですので・・・ もちろん私も今からもっと色々試してみます。

関連するQ&A

  • Apacheサービスが起動できない php apache2.2

     Apache2.2をインストールしましたが、Apacheサービスを起動させる ことが出来なくて困っています。  私はPHPもApacheも初心者です。  SoftBankCreative社の、基礎からのPHPという書籍を参考として、設定等行いましたが、うまくいきませんでした。  そのため、Webで調べてみましたが解決できません。  以下、私の症例を記します。 ・listening sockets available shutting downエラーがでる。 ・Apacheサービスのタスクバーのアイコンは「赤・四角」 ・同タスクバーを操作すると、異様に動作が重い。 ・Startボタンを押しても変化がない ・上記にも関わらずhttp://localhost/を開いて「it works」の  メッセージが出る ・Apacheのサブディレクトリhtdocsにhtmlファイル「test.html」を  設置し、http://localhost/test.htmlを開くと、正常に開ける。 ・が、test.html内にphpを記述しても反映されないく、  また、test.phpを同ディレクトリに設置しても404エラーとなる  さらに、私の環境を記しておきます。必要なことは答えますので。 よろしくご指導お願い申し上げます。 ・windows/vista HomePremium SP1 ・Intel Core2Duo 2.53GHz ・メモリ 3.00GB ・32ビット ・セキュリティ:ウイルスバスター2009(最低限のセキュリティ設定)

    • 締切済み
    • PHP
  • 拡張子がhtmlでもphpスクリプト実行したい

    webサーバがApacheの、レンタルサーバーでホームページを作っております。フレームの代わりにphpのincludeを使ってメニュー等を表示しています。しかし最終的に表示されるページの拡張子がphpでないと、きちんと表示されません。拡張子がhtmlでもphpスクリプトが実行されるようにしたくて、色々調べていたのですが、それらしき方法を発見しました。 Apacheで言えばhttpd.confの AddType application/x-httpd-php .php というところを例えば AddType application/x-httpd-php .php .html にするだけで、*.phpでも*.htmlなファイルであってもそこに埋め込まれているPHPスクリプトは実行されるようになる。 …とあったのですが、何をどう加えるか、もしくは変えればいいのかサッパリです。 もっとこっちの方が簡単だ、など、詳しい方いらっしゃいましたら、どうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPモジュールをロードしようとすると、Apache2.2が起動しなくなります。

    PHPの勉強をしたいと思い、WindowsXPにApache2.2.3とPHP5.2 を入れました。 Apache2.2はインストールして、PHPの設定をしなければ、 起動し、IEでhttp://localhostに接続すると「It works!」出ます。 しかし、httpd.confをPHP用に、 LoadModule php5_module C:\PHP\php5apache2.dll とモジュールをロードするよう記述すると、 「ローカルコンピュータでApache2.2を開始できません。 詳細については、システムイベントログを確認してください。 これがMicroSoft以外のサービスである場合は、サービスの製造元に 問い合わせてサービス固有のエラーコード1を参照してください。」 とダイアログが表示され、Apacheが起動しなくなってしまいます。 イベントログには 「Apache2.2 は次のサービス固有のエラーで終了しました: 1 (0x1)」 とあるだけでした。 C:\PHP\php5apache2.dllのパスは間違いないです。 何度インストールし直しても起動しません。 どなたか分かる方いましたらお願い致します。 またインストール時の参考には以下のサイトを見ました。 http://www.goodpic.com/mt/archives/000577.html http://www.y2sunlight.com/ground/?PHP5.0%2F2.Apache2%A4%CE%C0%DF%C4%EA http://allabout.co.jp/internet/database/closeup/CU20050319A/index.htm よろしくお願いします。

  • メールからphpスクリプト起動

    初めて質問させて頂きます。 レンタルサーバで、以下の処理を考えています。 1.メールを受信する 2.1をトリガーにしてphpスクリプトを起動する この処理は共有サーバでも実現可能でしょうか。

    • 締切済み
    • PHP
  • CGI版PHPについて

    一般的なPerlのCGIが実行可能な状態のApache(Linux上)にCGI版のPHPを追加インストールした場合、ApacheはスクリプトがPerlであるかPHPであるかの違いをどう認識するのでしょうか? 方法1 スクリプトはどちらも*.cgiとして作成し、スクリプト内先頭行のperlやphpへのパスの記述で認識する 方法2 perl→*.cgi php→*.php のようにhttpd.confや.htaccessで設定する 初心者のためこの二つくらいしか思い浮かばないのですが、どちらかが正解だったりしますか??

    • ベストアンサー
    • PHP
  • スクリプト言語としてのPHPについて

    PHPについてほとんど知らない者です(他の言語もほとんど知りませんが・・・)。 Webで検索していると、Webアプリを開発するLL言語としてPHP, Ruby, Python, Perlを使っているというケースをよく目にします。一方、タスクを自動化するためのスクリプトを記述する言語としては、Ruby, Python, Perl, シェルスクリプトで記述しているケースをよく目にします(Linux/UNIX系)。 そして、PHPはWebアプリ開発言語としてかなりのシェアを占めていそうだが、スクリプト言語としてはそんなにシェアを占めていないのかな? という印象を持ちました。 そこでお聞きしたいのですが、スクリプト言語としてのPHPは他の言語と比較してどのような感じなのでしょうか? PHPはWebアプリ開発言語としてだけではなく、スクリプト言語しても開発現場でRuby, Perl同様に使われているといった感じなのでしょうか? あるいは、WebアプリはPHPで書いてるけど、スクリプトはPHP以外(Ruby, Pythonなど)で書いているという方は結構いるのでしょうか?その場合、何故PHPを使わずに別の言語を使っているのでしょうか? ご意見をお聞かせください。

    • ベストアンサー
    • PHP
  • CGIモードのphpスクリプトが400で動くわけ

    さくらインターネットのレンタルサーバを利用しています。 さくらに聞け!、と言われてしまうかもしれないですが教えてくれると助かります。 困っているのと技術的な興味の半々です。 私が利用している「プロ」プランの特徴はユーザ権限でapacheが起動されていることです。 (ユーザ毎にapacheが起動されていると考えられます。http://tanaka.sakura.ad.jp/archives/000971.html) PHPはCGIモードで設定されていてPHPスクリプトはパーミッション400で動作します。 同じディレクトリにperlスクリプトもあるのですがこれは少なくとも500を与えないと動作しません。 そこでこの動作条件の違いの原因を考えてみて思いついたのですが、 両者の違いとしてPERLスクリプトの先頭にはperlの位置が明示されているがPHPスクリプトのそれにはない。 それからCGIモードでPERLを動作させる場合とCGIモードでPHPを動作させる場合とではhttpd.confの記述内容が違う。 (ExecCGI, AddHandler, AddType, Actionなど) 質問1 httpd.confに、PHPを設定するようにPERLを設定すれば PERLスクリプトも400で動作するようになるのでしょうか? またその場合先頭行でperlの位置を明示する必要もなくなりますか? (テスト環境がないためテストはしておりません)

    • 締切済み
    • CGI
  • Apache2.2の起動スクリプト

    Apache2.2の起動スクリプトは皆さんはどのように作成されていますでしょうか? ご存知の方、アドバイスをお願いします。

  • LINUXのユーザ追加スクリプト

    Linux上のApacheにおいて、Web上の公開フォームからPOSTされたユーザ名とパスワードで新規のLinuxユーザを作成するスクリプトをPHPかCGIで作ろうとしています。 しかし、なるべく”sudo”を使わない方法を考えているところで、止まっています。 サンプルコードを教えてください。

    • 締切済み
    • PHP
  • PHPスクリプトでperlスクリプト

    はじめまして。PHP初心者です。助け舟をお願いします。 PHPスクリプトで、formの表示からデータの受け取り→ファイルに書込み→終了画面の表示ができるスクリプトを書くことが出来ました。 これをphpスクリプト1とします。 POSTで受け取った変数を元に処理した変数を返すperlスクリプトがあります。 これをperlスクリプト1とします。 perlスクリプト1をphpスクリプトにすることは私には困難なため、phpスクリプト1のファイルに書き込む前に、perlスクリプト1を実行→返った変数をphpスクリプトで使用しファイルに書込み→終了画面の表示を行いたいです。 こんなことってできますか?

    • 締切済み
    • PHP