• ベストアンサー

cronでtxt、datなどのファイルを更新するには?

はじめまして、お手数をお掛けいたしますが、どうぞ詳しい方お力添えを宜しくお願い致します! 3時間に一度だけプログラムを実行し、 .datファイルのデータを更新するというのを作成しようとしています。 データの中身は、数字などで、更新するたびに+1ずつ数字を動かしていきたいと思っています。 出来たプログラムを、自分で更新して動かすときちんとデータ更新しているのですが、 cronを設定し、cronから動かすと更新ができていません。 エラーメールを見ると、どうも更新したいdataファイルが読み込めてないようで。 cronを使うのは初めてなのですが、データを読み込んで、そのデータを分割、その内の数値に+1し、また書き込むということはできないのでしょうか? cronの設定は、レンタルサーバ上で出来るので、そちらで設定しています。 コマンドは /home/アカウント/www/○/○/cgi/○/time.cgi と、cgiの場所までを記述し、 時刻は * * */3 0 となっているハズと思います(コンパネからの設定なのでなんとも…) どうぞご教授くださいませ…!

  • CGI
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.2

スクリプトの中のどこにもチェンジディレクトリが行われていませんが。 data.datを絶対パス名で書くか、チェンジディレクトリを行う必要があるのでしょう。

fujiblue
質問者

お礼

cd で移動させて、ディレクトリを指定したら今度はうまくいきました! なんだか試したときにちょっと間違えて記述していたようです。 どうもありがとうございました!

fujiblue
質問者

補足

あ…やっぱりそこになるのですね; この場合、ディレクトリはどこになるのでしょうか? 一応そうかなぁ、と思って、ちょっと色々試してみたのですが、 /home/アカウント/www/○/○/cgi/○/data.datとしてみたり、 http://から指定してみたのですが、ダメでした; もしくはチェンジディレクトリなのですが、 cgiの方で指定するのでしょうか? 色々と検索してみた中で、コマンドの設定時、頭にcdをつけてディレクトリを指定するとあったので実行してみたのですが、ちょっとうまくいかなくて; (cd /home/アカウント/www/○/; ./○/cgi/○/time.cgiとしてみました) 多分レンタルサーバ側の指定で一時間に一度までしか設定できなくなっているみたいなので、確認が一時間ごとしかできません。 なので、ちょっと結果の返答が遅れてしまうかもしれず 申し訳ありませんが、どうぞご助力くださいませ;

その他の回答 (1)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

データファイルのパーミッションはあっていますか?

fujiblue
質問者

補足

パーミッションは666になってるので、多分大丈夫だと思います。 念のため、cgiのソースの方も。 ***************** $data = "data.dat"; open (IN,"$data") || &error("ファイルが開けません"); $lines = <IN>; close (IN); ($count,$day,$week,$ahb,$ap,$timeset,$time,$last) = split(/,/, $lines); $timeset=$timeset+1; if($timeset == 24){$timeset = 0; $count++; $day++;} if($timeset < 12){$ap = "A";}else{$ap="P";} if($timeset >12){$time=$timeset-12;}else{$time=$timeset;} @new = "$count,$day,$week,$ahb,$ap,$timeset,$time,$last"; open (LINES,">$data") || &error("dataファイルが開けません。"); print LINES (@new); close (LINES); ****************** 途中の数式はあまり関係ないとは思いますが、もしこちらが原因になったらと思い、載せたままにしております; 初心者組み立てなので、もしかしたらこちらに不備が、あったり、するのでしょうか(あわわ)

関連するQ&A

  • Xサーバーのcronでcgiが自動更新されません。

    perl初心者です。RSSを取得してタイトルや内容をhtmlに吐き出すというプログラムを作成しています。Xサーバーで指定時間に指定コマンド(プログラム)を自動的に実行させるサーバーの機能(cron)といものがあったのでマニュアル  http://www.xserver.ne.jp/man_program_cron.php を見て自動更新しようと試みているのですがプログラムが実行されません。 hello.cgiというプログラムを実行しようとしているので マニュアルにある絶対パスの記入例の通り /home/●●●/▲▲▲/public_html/hello.cgi とXサーバーのCron設定で記入しています。自動更新の時間になったら「Cron結果の通知アドレス」で設定したメールは届くのですがプログラムは実行されてません。 cronの機能を使う際perlのほうで(ここではhello.cgi)何か記述する必要があるのでしょうか?もしくは何かモジュールとか必要なのでしょうか? ps. cron以外でもperlのプログラムを自動的に動かす方法があったら教えて下さい。宜しくお願いします。

    • ベストアンサー
    • Perl
  • datファイルとは?

    CGIなどで、外部のdatファイルを読み込んだりすることがあります。 ふと思ったのですが、なぜtxtファイルでは駄目なのでしょう? 別にtxtファイルにも、データは書き込めると思うのですが。 質問の意図が伝わりにくいかもしれませんが、 そもそも拡張子がdatのファイルとは何なのかを教えていただけないでしょうか。

  • DATファイルの開き方

    私のPCはXPで、IE8です。 今回、使っているデータと設定のすべてを、フラッシュメモリに、バックアップしました。 その際、「すべてのプログラム」の中にある「ファイルと設定の転送ウィザード」を使いました。 メモリには、「DATファイル」と出ました。 ところが、これを開こうとしましたが、「このファイルは開けません」・「ファイル USMT21MG.DAT」と表示されました。  どうすれば開けますか? 教えていただければ助かります。

  • cronがうまく動作していないっぽいです。

    Fedora8の環境でcronの設定をしましたが思い通りに動いていないみたいなので教えてください。 まず、cronの設定は crontab -l SHELL=/usr/bin/perl */5 * * * * root /var/www/cgi-bin/test.cgi です。 このtest.cgiは、コマンドラインで./test.cgiとすると同じディレクトリ内のファイルに動作した時間とその旨のログを追記します。 perlで書いてあり、現在の属性は755 ftpuser:ftpuserとなっています。 とりあえず5分間隔で動作するように設定したつもりです。 しかし、いくら待てどもそのログファイルに追記されません。 ちなみに、/var/log/cron には CROND[3511]: (root) CMD (root /var/www/cgi-bin/test.cgi) なカンジで5分ごとにログが出ています。また、5分毎にメールが来ていて(Cronデーモンから?) /var/www/cgi-bin/test.cgi syntax OK と記載されています。 test.cgiからログを吐かせるには何が必要かご教授願います。

  • DATファイルを開くには?

    DATファイルをメールにて添付していただいきました。しかし、そのDATファイルを開こうとすると、 「指定されたファイルに対してこの操作を行うプログラムが関連付けられていません。[フォルダオプション]コントロールパネルでプログラムを関連付けてください」 というメッセージが出てきます。 そこで、コントロールパネルから[フォルダオプション]をいじろうとしたのですが、拡張子DATの詳細の欄にある「詳細設定」をどのように行えばいいのかわかりません。もし、ご存知の方がいらっしゃいましたら、お教えください。

  • datファイルがひらかない・・・

    こんにちは。 友人が携帯で撮った写真をメールで送ってくれたのですが、 「ファイルの形式をしてください」とでて 開くことができません。 jpg.の後数字がかいてあり最後に.datとなっています。 他の方の質問と回答を見て、色々試してみたのですが ひらきませんでした・・・。 たくさん送ってくれたので再度お願いするのも 気が引けてしまい、できれば自分で開くことができれば と思ったのですが、解決方法はありますでしょうか? それとも、再度送っていただけるようお願いした方が よいでしょうか? パソコンの知識があまりないので困っています。 お力添えいただければと思っています。 宜しくお願いいたします。

  • CRONを使って、アクセスログを毎日メールで受け取りたい

    CGIでホームページのアクセスログを取得しているのですが、この取得したファイルを、毎日決まった時刻に添付ファイルにして、メールで受信したいのですがどのようにすればよいでしょうか? CRONというものを使えばよいということまでは分かったのですが、CGI入門者の私から見てどのように設定すればよいのかまったく分かりませんでした。 TelnetとFTPを使って、圧縮解凍ができるレベルのUNIX?の知識です。 また、CRONは、さくらレンタルサーバーのスタンダードを使っているため可能ということでした。 何か、参考になることを教えていただけると幸いです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • dat の内容の見方について

    済みません教えてください(プログラミングとは違うかもしれませんが) CGIを使いアンケートを作成しました。 内容はabc.datと言うファイルへ書き込まれる様にしました。 画面上からはアンケートの内容も更新もされ、FTPソフトで見るとabc.datファイルも更新されています。 内容に一部不適切な内容が書き込まれていたので、abc.datファイルを編集しようと思い、FTPソフトでabc.datファイルを自分のPCへ取込んだのですが開いてみると何も書かれていません。 どうすればよいのでしょうか?

    • ベストアンサー
    • CGI
  • cronにて動かすと・・・

    はじめまして Fedora Core3 + Postgresqlの環境で開発をしています。 自動的に、バックアップをとる仕組みを作っているのですが バックアップをおこなう、shファイルに psql -f /www/sql/abc.dat abc として、一括でデータベースを復元してます 手動で、shファイルを動かすと、ちゃんと復元されるのですが cronで、このshファイルを時間設定し動かすと psql -f /www/sql/abc.dat abc が、まったく動いてなく、復元できません すみませんが どなたか、教えてください よろしくお願いします。

  • cron設定についてです。

    こんばんは。開発初心者の者です。 今、データベースから引っ張って来たデータを csv作成するphpプログラムファイルを 1日1回cronなりで設定して 自動で動かしたいと思っています。 しかし、php本体を置いているサーバー(仮称:Aサーバー)と csvを作成するプログラムファイルを 置いているサーバー(仮称:Bサーバー)が違うため cron設定にかなり手こずっています。 http://のURL形式でcsvを作成するphpを実行できるので、 Cronがwgetを使いURL形式で読み込んで できそうだということがわかりました。 早速、色々調べて手始めにwgetをやってみたのですが、 ~DNSが…サービスが…不明です。(うろ覚えですが) のような記述が出てwgetすら実行できません。 BASIC認証などもあり、 元々の読み込みURLはhttps://になってます。 (csvを書き出すphpファイルの階層はhttp://になってます) BASIC認証対策用記述もして何度も試みてみましたが、 一向にできません。 開発をしている別環境ではphp本体、 csv作成をするphpファイルともに 同じサーバーに置いてあり、こちらは * * * * * /usr/local/bin/php /…/…/~.phpのような 通常のcron、 * * * * * wget --http-user=** --http-passwd=*** http://~ のようなwgetを使用したcron設定ともに 普通に自動実行ができますが…。 Aサーバー、Bサーバーともにpoderosaを使用して cron設定のコマンドを書いてますが、 何が悪いのかさっぱりわかりません。 php本体を置いてあるAサーバー側でcronの記述するのが たぶん正しいかと思うのですが、 どちらでcron設定するのが正しいのでしょうか? また、何故今wgetができないのかをお聞きしたいです。 サーバーは全く触っていないため仕組みはよくわからないです。 恐らくSSL形式になっていると思います。 何が原因と考えられるでしょうか? また、何かcronなどの他に、このcsv書き出しをするphpを 自動で動作させる方法などもないでしょうか? 知識不足、説明下手で申し訳ないですが、 どうしても解決したいので回答よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう