• 締切済み
  • すぐに回答を!

PHPで編集したファイルをcrontabに設定する

 PHPで編集したファイルを、crontabに設定しようと、プログラムを製造しています。  しかし、rootユーザーのジョブキューにPHPで編集したファイルの内容が反映できません。  下記URL(niftyホームページ)記載の通り、sudoを使用し、実行時にrootユーザーを指定し、rootユーザーのジョブキューにtext.txtの内容を設定しようとしていますが、反映できません。ちなみに、test、apacheユーザーに対しても試してみましたが反映できませんでした。以下に作業内容を記載しますので、どこがおかしいのか教えていただければありがたいです。 【作業内容】 (1)sudoを設定する。  1)sudoをインストールする。  2)/etc/sudoersを編集する(コマンドvisudoで実施)。   a)ユーザーと、それぞれの実行権限の追加。     root ALL=(ALL) ALL     test test=(root) ALL     apache test=(root) ALL   b)wheel を全てのホストで、全てのユーザーのすべての権限を実行できるように設定     %wheel ALL=(ALL) ALL   c)wheelはパスワードを入力せず、コマンドを実行できるように設定。     %wheel ALL=(ALL) NOPASSWD: ALL (2)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からroot権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへroot権限で設定しようとしています。  1)ログインユーザーrootで実行する   sudo -u root crontab /var/document/test.txt  2)ログインユーザーtestで実行する   sudo -u root crontab /var/document/test.txt  3)ログインユーザーapacheで実行する   ※ユーザーapahceでログインすることは不可能です(以降省略)。 以上のコマンドそれぞれ実行し、rootユーザーのジョブキューにtest.txtの内容が入ることを確認。 (3)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からtest権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへtest権限で設定しようとしています。  1)ログインユーザーrootで実行する   sudo -u test crontab /var/document/test.txt  2)ログインユーザーtestで実行する   sudo -u test crontab /var/document/test.txt 以上のコマンドそれぞれ実行し、testユーザーのジョブキューにtest.txtの内容が入ることを確認。 (4)sudoコマンドが正常に実行できるか確認する。TeraTermの画面からapache権限でcrontabを実行する。以下は、PHPで編集した、test.txtファイルの内容を、crontabへapache権限で設定しようとしています。  1)ログインユーザーrootで実行する   sudo -u apahce crontab /var/document/test.txt  2)ログインユーザーtestで実行する   sudo -u apache crontab /var/document/test.txt 以上のコマンドそれぞれ実行し、apacheユーザーのジョブキューにtest.txtの内容が入ることを確認。 (5)(2)で試したコマンドを、PHPプログラムに埋め込み実行する。system()、sell_exec()、exec()でそれぞれ実行しました。  1)system("sudo -u root crontab /var/document/test.txt");  2)sell_exec("sudo -u root crontab /var/document/test.txt");  3)exec("sudo -u root crontab /var/document/test.txt"); 以上の内容をプログラムに記述し、実行しましたが、test.txtの内容をrootのジョブキューに、設定できませんでした。 《確認コマンド》 sudo -u root crontab -l なお、test、apacheユーザーも同様に試してみました。 ※testユーザー権限で実行  1)system("sudo -u test crontab /var/document/test.txt");  2)sell_exec("sudo -u test crontab /var/document/test.txt");  3)exec("sudo -u test crontab /var/document/test.txt"); ※apahceユーザー権限で実行  1)system("sudo -u apache crontab /var/document/test.txt");  2)sell_exec("sudo -u apahce crontab /var/document/test.txt");  3)exec("sudo -u apache crontab /var/document/test.txt");  以上のプログラムを実行後、それぞれのジョブキューを確認しましたが、text.txtの内容をcrontabへ設定できませんでした。 《確認コマンド》 sudo -u test crontab -l sudo -u apache crontab -l  system()、shell_exec()、exec()、それぞれの関数を使用し、管理者権限以外のコマンド(mkdir、cp、mv、rm等)を実行した場合、問題ないので、本問題は実行権限と考えていますが、以上の情報で何がどうおかしいの分かりますでしょうか?お手数をかけますが、ご回答お願いします。 【niftyでの回答】  niftyのサイトに以下のような質問・回答がございますが、本投稿の内容とほぼ同じと認識しています。  但し、niftyの回答をそのまま実行してみましたが、実行できませんでした。環境の違いのせいでしょうか? http://oshiete1.nifty.com/qa7939488.html ※上記設定(/etc/sudoers)は、セキュリティレベルが低いのは十分承知しています。以上の処理が正常に動作確認後、徐々にセキュリティレベルを上げていく予定です。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数445
  • ありがとう数1

みんなの回答

  • 回答No.1

> PHPプログラムに埋め込み実行する というのは、PHPをコマンドラインで実行されているのでしょうか? それとも、WebアプリとしてWebサーバ上での実行でしょうか? 後者の場合、実行プロセスのオーナーは、通常apacheですから system("sudo -u root crontab /var/document/test.txt"); ができるようにするためのsudoersの設定としては、 "apacheというユーザーが" "パスワードなしに" "rootの権限になって" "crontabを実行" できるように設定する必要があります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

 ご回答ありがとうござます。 【回答】 "apacheというユーザーが" "パスワードなしに" "rootの権限になって" "crontabを実行"できるように設定する必要があります。  私の質問の記述中に、指摘いただいた設定はできております。  なお、いろいろ試した結果、私のOSの理解不足ということが判明しました。  ここで、なぜ実行できなかったかを記述することは、OSのバージョン等を公開することになりますので、記述しませんが、実行できましたことをご報告します。  貴重なお時間をいただき大変ありがとうございます。また、質問等ありましたら、このサイトを利用させていただきますので、その際にも、また、ご回答いただければありがたいです。  重ね重ねありがとうございました。

関連するQ&A

  • PHPからcronを編集したい

    ブラウザから時間を指定してリクエストを投げると下記PHPを実行するプログラムがあります。 shell_exec("echo {$pass} | sudo -S sh -c 'cat {$root_dir}/craw/crontab.txt > /var/spool/cron/crontabs/{$cron_user}'"); shell_exec("echo {$pass} | sudo -S chown {$cron_user}:crontab /var/spool/cron/crontabs/{$cron_user}"); shell_exec("echo {$pass} | sudo -S chmod 600 /var/spool/cron/crontabs/{$cron_user}"); 実行はちゃんと行われて、/var/spool/cron/crontabs/userの中身もちゃんと期待したとおりに変更されています。 しかし、いくら待っても登録したjobが実行されることはありません。(/var/log/syslogを見ても実行された形跡はありません) shell_exec("echo {$cron_pass} | sudo service cron restart"); を付け加えてみても結果は同じでした。 crontab -eで編集→保存とするとちゃんと反映されるようです。 どのようにすればPHPからcronを登録できるでしょうか。 よろしくお願い致します。

  • crontab -e コマンドで編集してもCronが動作しません。

    testユーザーで手動でコマンド実行すると正常に動作するのですが、 crontab -eで、下記のようにCronを登録しても動作しません。。 00 12 * * * /var/www/html/bin/cron.sh args1 /var/log/cronを見ても Jun 19 12:00:01 web1 crond[3095]: (test) RELOAD (cron/test) というように、RELOAD となりまりコマンドが実行してくれません。。 Jun 19 13:01:01 web1 crond[9116]: (root) CMD (run-parts /etc/cron.hourly) というように、CMDが出ているのですが。。

  • PHPでUNIXコマンドを発行してファイルへ追記できない

    PHPでUNIXコマンドを発行してファイルへ追記できない 現在,/etc/aliasesファイルへ,PHPから文字列を追加したいのですが,うまくいかず,皆様のお知恵を頂ければと思います. 現在,sudoersにapacheユーザを追加しており,パスワードを渡せば全権限を持たせています. それで,PHP上で $command = "echo '".___APACHEPASS___."' | sudo -S cp /etc/aliases /etc/alias_bak/aliases.bak.".date("YmdHis"); exec($command, $output); とすれば,aliasesファイルのバックアップファイルが生成されます. ところが,文字列を追記するため,コマンド $command = "echo '".___APACHEPASS___."' | sudo -S echo '{$_POST['user_name']}: | /var/www/html/test.php' >> /etc/aliases"; を発行しても追記されません. バックアップファイルコマンドが実行されれば,/var/log/secureにログが残りますが,追記コマンドでは失敗のログすら記録されていません. なお,コマンド自体を表示させると, echo 'apache-password' | sudo -S echo 'user-name: | /var/www/html/test.php' >> /etc/aliases となっており,rootのコマンドラインで echo 'user-name: | /var/www/html/test.php' >> /etc/aliases を実行すれば,正常に追記されます. 乱文となってしまいましたが,追記されない原因の見当がついたかた,ご教授頂けると幸いです. よろしくお願い致します.

  • crontab -lの結果取得

    教えて下さい。 <? $lines = shell_exec("crontab -l"); echo $lines; ?> 上記結果でcronのジョブ一覧を取得したかったのですが、期待通りの結果が返ってきませんでした。(何も取得できませんでした。) crontab -l自体は通常のコマンドとして使えているのですが、、 実行ユーザーの問題かと思い、"crontab -u root -l"ともしてみましたが結果は同じでした。 また、パスの問題かと思い、"/usr/bin/crontab -u root -l"ともしてみましたが結果は同じでした。 この場合、どこが問題となっているのでしょうか。 宜しくお願い致します。 FedoraCore9 php-5.2.5-7.fc9.i386 httpd-2.2.9-1.fc9.i386

    • ベストアンサー
    • PHP
  • 別ユーザでのコマンド実行(root権限)のやり方を教えて下さい

    現在、Solaris9でroot権限のコマンドを実行したいのですが、いちいちroot権限になってからコマンドを実行するのが面倒です。 ex) aaaユーザでrebootを実行したい。 出来るならaaaユーザにはスーパーユーザのパスワードを教えたくない 一応、「sudo」というコマンドを使用すれば出来ると分かったのですが、現在の環境ではsudoコマンドはありませんでした。 別の方法で出来るかどうか教えて頂けないでしょうか。 すみませんが、回答よろしくお願いします。 環境: OS:Solaris9

  • Fedora11 crontab 設定エラー

    Fedora11「crontab -l」が「コマンドが見つかりません」になる。 (Q1) Fedora11で、cron を利用したく動作テストしています。 crontab は、/etc内にあります。 [root@betasei etc]# ls -l crontab* -rwxrwxrwx. 1 root root 420 2011-05-18 10:36 crontab テスト用スクリプトです。 [root@betasei etc]# cat test.sh echo xxxxxxxx gedit crontab で次のように編集しました。 [root@betasei etc]# cat crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin/:/etc/ MAILTO=root HOME=/ # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR #sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed 1 1 * * * /etc/test.sh 設定確認すると、次のようにエラーになります。 [root@betasei etc]# ./crontab -l ./crontab: line 13: 1: コマンドが見つかりません [root@betasei etc]# 1 1 * * * /etc/test.sh ここのところを ./test.sh にしてみたりしてもダメです。 どうしたらよいのでしょうか。 (Q2) ところで、crontabの編集は、ターミナルやろうとして、 crontab -e と実行すると、viか何かの空白編集画面が出ます。 上記 gedit crontab の画面のように初期値が出ません。 gedit crontabで編集してもよいのですね。 (Q3) /etc/crontab は、テキストファイルですね。 でも、このcrontabは実行ファイルですね。 ./crontab -l どうなってるですか。 初歩的な質問ですみません。

  • ユーザ版のsudoってありますか

    sudoでスーパーユーザでコマンドを実行できますが、逆にrootアカウントで一般ユーザ権限でコマンドを実行するコマンド、プログラムがありましたら教えてください。

  • phpファイルをcronで動かすには?

    /var/www/html/test.phpというファイルを毎日午前6時に動かしたい(たたく?)のですが、cronをどのように設定したらいいのか分かりません。サーバーはcentos5でroot権限をもっています。 http://www.server-memo.net/tips/crontab.html こちらを参考にしているのですが、どこから手をつけていいのかすら分かりません。 /etc/以下には次のようなファイルやフォルダがありました。 cron.d cron.daily cron.deny cron.hourly cron.weekly crontab これをどのようにして利用したらいいのでしょうか?

  • Linux  CentOS shellスクリプト内でユーザーをスイッチする方法教えて下さい。

    困っています。ご存知の方教えて下さい。 一般ユーザーでshellスクリプトを実行して、root権限にスイッチして、root権限のみに許されたコマンドを実行してから、 一般ユーザーに戻る方法がわかりません。 ターミナルで sudo su コマンドを実行すると、対話式でパスワードを入力できますが、スクリプト内で対話式のパスワードを入力してrootに ユーザーをスイッチする方法がわかりません。 ------------ !#/bin/sh mkdir /home/user1/tmp ←一般ユーザーで実行したいコマンド sudo su ←ここでパスーワード入力して rootに権限スイッチ mkdir /var/log/aaa   ←root権限で実行したいコマンド su user1 touch /home/user1/bbb ← 一般ユーザーに戻ってコマンド実行 ------------ 環境:CentOS5 お願いします。

  • PHPからCronを編集したい

    いつもお世話になります。 PHP(HTML)のフォーム上から、クーロンの実行日時を設定したいと思っています。 いくつか同じような質問など参考にしたのですが、いまいち分からず困っています。 理解できた内容ですが、 ・shell_execを使ってシェルコマンドをたたく。 ・crontabに、実行したい日時とファイルを記述する。 程度です。 クーロンのテストがてらターミナルからcrontabを編集して、「指定した日時に音楽ファイルを実行する」ことはできました。 PHPでcrontabを編集するにはどのようにすればいいのでしょうか?? ざっくりとした内容で申し訳ありませんが、詳しい方どうかご教授宜敷くお願い致します。 開発環境: Mac OS 10.6.8 PHP 5.2.17

    • ベストアンサー
    • PHP