• 締切済み

複数の処理を順番にログアウト後も実行したい

こんにちは。いつもお世話になっております。 使用しているOSは、CentOS6です。 echo1.php echo2.php echo3.php echo4.php という4つのPHPがあります。このPHPファイルをVPS上の/usr/bin/phpで処理したいのですが、一つ一つのPHPファイルは処理に1日かかります。(つまりすべて終了するまでに4日かかります) また、echo2.phpは処理を行うのにecho1.phpのデータを、同様にecho3.phpはecho2.php、echo4.phpはecho3.phpのデータを必要とします。 そこで前の処理が終わったら、自動で次の処理をするように設定したいのですが、現在の接続環境は不安定であるため、ログアウト後も処理を継続するようにしたいです。 execで実行後に次のファイルを実行しようと思ったり、cronで余裕をもって2日ごとに処理を行うように書こうとも思いましたが、もっとスマートに、コマンドで順番にログアウト後も処理を実行するよう指示する方法はないものでしょうか。 どなたかご教示の方、どうかよろしくお願いします。

みんなの回答

  • ki073
  • ベストアンサー率77% (491/634)
回答No.3

nohupを使って実行すれば切断しても継続できます。 例えば echo1.php echo2.php echo3.php echo4.php を書き込んだテキストファイル(exec.sh)を作成し、 nohup bash <exec.sh & で順番に実行できます。 標準出力などはnohup.outに書き込まれます。 また、このような長時間実行にかかるプログラムを実行するときにはtorqueを使うと、順次実行できます。 本来は、複数のコンピュータを実行状況を見て順次処理するのに使われますが、1つのパソコンでも十分役立つと思います。 私のところではこれで十数台をコントロールしています。 http://www.adaptivecomputing.com/products/open-source/torque/

全文を見る
すると、全ての回答が全文表示されます。
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

#!/usr/bin/sh echo1.php echo2.php echo3.php echo4.php みたいなシェルスクリプトにすれば、順番に実行しますよね。 (echo1.php ; echo2.php ;echo3.php ;echo4.php) と1行にも書けます。 echo1.php && echo2.php && echo3.php && echo4.php と、「前のコマンドが正常終了したら」としてもよいでしょう > 現在の接続環境は不安定であるため、ログアウト後も処理を継続するようにしたいです。 この目的なら、 tscreenやGNU screenやtmuxといったツールを使う、という方法もあります なお、私なら、まず最初に、1日もかかる処理が、本当に1日かけなければならないものなのかを調べ、可能なら対策したプログラムにします。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

phpにもあったと思うが、まあ標準のシェルで作成したほうがいいでしょう https://www.google.co.jp/search?hl=ja&q=Sujinosuke&lr=lang_ja#hl=ja&lr=lang_ja&psj=1&q=shell+nohup+trap&tbs=lr:lang_1ja この辺りは、覚えておいた損はない。 >もっとスマートに、コマンドで順番にロ それは、スマートとは言わない。もともとPHPで作成すること事態、スマートではない。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • シェルスクリプトからPHP実行

    シェルスクリプト(bash)内で、以下のようにPHPを呼んだ場合、 その次の処理がPHPの終了を待たずに実行されるようなのですが、 どうしてでしょうか? #!\bin\bash /usr/local/php4/bin/php /home/test.php echo "test!" 以上 なぜか test! という表示がPHPの処理中に出るように思えます。

  • Perlを実行する方法

    Perlを実行するために <?php $ret = exec('/usr/bin/php /usr/local/apache/public_html1/testdir/a.cgi'); print $ret; ?> のように書きましたが、a.cgiは実行されないし$retは空白でした。 execでなくてもよいのですが、普通はPHPの実行中に、ある処理をさせるa.cgiを実行させるにはどうしているんでしょうか? a.cgiの処理が終わるまでphpのprint $ret;のステートメントの実行は待ち状態で、a.cgiの処理結果がTRUEなのかFALSEなのかを得られればさらによいです。

    • 締切済み
    • PHP
  • Cronで同じ処理を複数同時に実行するには?

    PHPで作ったWebサービスがあります。 ユーザーが100人いたとします。 この100ユーザーそれぞれのデータを、毎日0時(例えば)になると処理をするというCronを作りたいです。 PHPファイルは1ユーザー分の処理をするので、Cronで毎日0時に指定すると1人分の処理しかできません。 ではユーザー毎にCronを100個作るのは得策ではないと思います。 「一つのCron実行で100人分処理すれば?」というご意見もあるかもしれませんが、 1人分の処理が3~30秒かかるので、レンタルサーバーの1実行当たりの動作時間を超えてしまう問題があります。 毎日0時に100人分の処理を実行するのは無理なのでしょうか? そもそも共用のレンタルサーバーレベルでは、100人分の同時処理というのは現実的ではないでしょうか? そうすると、1人ずつ処理していくと、30秒×100人=50分の処理時間が必要になります。 こういう場合はどのように設計すれば良いのでしょうか? どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのexecで別PHPの実行

    「エックスサーバー」というレンタルサーバーを使用しています。 PHPファイルの中で[exec()]関数を用いて、別ファイルのPHPを実行させたいと考えております。  ・PHPバージョン:5.3.3  ・ドメイン:XXXXX.xsrv.jp 以下の内容(ProgramA)を実行すると、 [exec()]関数で呼び出している処理(ProgramB)が実行されていないように思います。 どのように修正したら、(ProgramB)が実行されるのでしょうか? どうかご教示くださいませ。 ---ProgramA.php (起動する側)---------------------- <?php exec('/usr/bin/php5.3 /home/XXXXX(ユーザー名)/xsrv.jp(ドメイン)/public_html/AAA/BBB/ProgramB.php'); echo "test!"; ?> ※ProgramA.phpを実行すると、ブラウザには「test!」という文字列が表示されます。 ※ProgramA.phpのパーミッションは755に設定されています。 ---ProgramB.php (起動される側)---------------------- <?php echo"HelloWorld"; ?> ※ProgramB.phpのパーミッションは755に設定されています。

    • 締切済み
    • PHP
  • シェルコマンドでphpを実行したい!

     さくらインターネットでcron設定を使って月末になると起動するphpを読み込もうとしたいのですが、どうやっても上手くいきません。 いろいろと参考になるサイトはあるのですが、動かない理由がわからないのでどなたか教えてください。  まず、cron設定で設定しているシェルのファイルが置いてあるパスに間違いはありません。  次にシェルファイルに書いてあるコードは以下です。 #!/bin/sh PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin cd /home/自分のID/www/自分で作ったフォルダ/; ./自分で作ったフォルダ/phpファイル という風に書いてあります。 ところが、時間になるとこれが実行されず、 サーバーよりエラーメールが届きます。 [not found]と一言。 …最初、シェルファイルの階層が間違っているかと思ったのですが、 どう見てもあってますし…中身が問題なのかなぁ、と考えます。 何かわかれば、是非教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • さくらVPSでcronでphpを実行

    さくらVPSでcronでphpを実行したいのですが、うまくいきません? vi /etc/crontab    ↓ 30 * * * * root /usr/bin/php/var/www/html/oms-main2/end.php 実行できないので /etc/rc.d/init.d/crond status → crond (pid 2559) を実行中 ちなみにend.phpは、手動では動きます。 宜しくご教授お願い致します。

  • cronでpg_dumpの実行

    こんにちわ。 Linuxでcronを設定しPHPからexecで「pg_dump」を実行しようとしています。 エラーになり実行ができません。 設定は /var/spool/cron ディレクトリに 『crontab -e -u postgres』でコマンドを実行し SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO='' HOME=/ 08 19 * * * postgres /usr/bin/php /home/var/b_dump.php とcrontabに記載しています。 コマンドの実行はrootユーザで 権限は777 にしています。 メールを届くようにしているのですが、届くメールは 『postgres does not know where to find the server configuration file. You must specify the --config-file or -D invocation option or set the PGDATA environment variable.』 と届きます。 googleで検索したのですが、解決方法がわかりません…。 読みにくい文章で申し訳ないのですが、解決方法のご教授を お願いします。

  • fedora11でのcron設定

    fedora11,apache,php5の環境でcronを使いたいのですが、動きません。。 状況が、 fedora11 php5 apache を使用していて、cronを使ってphpの定期実行を行いたいのですが、どうしてもうまくいきません。 かなりググってはみたのですが、liuxについては初心者なので、どうにもわかりません。 設定内容が、 /etc/crontabが、 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ * /1 * * * * apache /usr/bin/php /var/www/html/cron.php で、/var/log/cron でログを確認したところ Jul 28 19:00:01 host CROND[8417]: (apache) CMD (/usr/bin/php /var/www/html/cron.php) となっていてこれが一分ごとに出てきます。 cron.phpにはファイル追記の処理を書いてあります。 エラーではないようなのですが、ファイル操作が行われていないようなので動いていないようなのです。 ローカルホストでphpを実行したらちゃんと動くのでphp内のミスではないようです。 パーミッション関係だったらログにエラーが出そうなものですし、、、。困っています。。 どなたかお知恵を貸していただけませんでしょうか、よろしくお願いします。

  • さくらVPSでcron指定はsh? php?

    これまで別のレンタルサーバで動作していたcronをさくらVPSでも動作させたいのですがうまくいきません。 ■これまで(レンタルサーバ) 1.cronにshファイルを指定 2.shファイル cd /var/www/★★ /usr/local/bin/php -d include_path='.:./●●.php ■今回(さくらVPS) /etc/crontab/ 05 7 * * * root /usr/bin/php /var/www/■■.sh ・どうしたら動作するでしょうか? ・/etc/crontab/の指定先は「phpファイル」「shファイル」の何れを指定するのでしょうか?

  • PHPファイルをcronで実行するには…?

    ご質問させてください。 私はさ○らインターネットを使っていて、そこで cron設定をしてあるPHPファイルを実行したいを考えています。(このPHPファイルというのはメール送信のファイルです。) いろいろなサイトを探し回って設定の方法を調べたら、実行コマンドに cd /home/○○/www/; ./○○.php もしくは /usr/local/bin/php -f /home/○○/www/○○.php  と記述すれば大丈夫ということなのですが、これが全く起動していないようなのです。 そもそも cron ではPHPを起動できないのでしょうか?ご存知の方がいらっしゃいましたらご教授お願いいたします!

    • ベストアンサー
    • PHP