• ベストアンサー

定期的に.plを動かすには(cron?)

1時間に1回、POPサーバを見に行き、受信メールがあればDBにチェックをつけるという処理をしたいと思っています。 そのプログラム(perl)は何とか作成できそうなのですが、定期的にそのperlプログラムを実行させる方法が分かりません。 UNIX系であれば、cronかなと思うのですが、ファイル自体を動かす事ができるのでしょうか? また、定期的に動かす方法が他にもあるのでしょうか? どうかご教授下さい。よろしくお願い致します。

noname#107402
noname#107402

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

  • ベストアンサー
  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

crontabの内容は以下のようなものでいいでしょう。 0-59/5 * * * * ユーザ名 スクリプトのパス 各フィールドは分、時、日、月、曜日、ユーザ名、コマンドです。 *は全て、2つの数を-でつなぐと範囲指定、/の後に数を書くと繰り返し感覚となります。 0-59/5は「0分から59分まで5分ごと」と言う意味になります。 スクリプトの先頭行で #!/usr/bin/perl のようにperlの実行プログラム(スクリプトではなく)のパス名を指定してください。

noname#107402
質問者

お礼

何度もありがとうございます。大感謝です! コマンド操作苦手で。。 ありがとうございます。

その他の回答 (2)

  • ka-2
  • ベストアンサー率37% (22/58)
回答No.3

荒業ですが、違う方法が1つあります。 cron(crontab?)が使えない場合にでもつかって使ってみてください。 system というコマンドを使います。 例:$ret = system "./test.pl"; これを使えば外部のコマンドを実行できます。 私のサイトでは試験的にカウンタに仕込んでメールの配信などをしています。 (これが出来る条件が、良く呼び出されるCGIである、多少遅くなっても我慢できる) プログラムが呼び出されて終了するまでメイン(呼び出したほう)の処理がスリープしますが、多くの妥協&最終手段としては使えると思います。

noname#107402
質問者

お礼

ご回答ありがとうございます。 スミマセン、使い方が上手く理解できませんです。。 perl(プログラム自体)に長けている訳ではないのですが、 ”POPサーバを見に行き、メールが届いていたら、少し処理をする”事は普通のプログラムで書けると思っています。 ただ、そのプログラムを定期的に動かすプログラムを書く方法が分かっていません。一つのプログラムをループさせて、24時間365日動かし続けるのは無理があると思っています。 そこで、サーバのコマンドかシェルスクリプトでなら、何とか定期的に動かせるかな、いや、動かしたいと思った訳です。 元々、コマンドを使いたい訳でなく、定期的に動かすにはどうするか?ということだったんです。 でも、CGIから動かすようにすれば、systemで書けそうですね、クライアントにJavascriptで定期的に実行させるようにして。。。うーん、もう少し力をつけねばと思いました。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

cronでスクリプトは動作します。 先頭の#!行でperlのパスが記述されていればオッケーです。

noname#107402
質問者

お礼

ありがとうございます。 # crontab xxx.pl で良いのかな? 挑戦してみます。他のやり方も探して見たいです。 では。

関連するQ&A

  • cronで動かすと保存されなくなる

    レッツPHPさんの写メールBBSを使わせていただいています。 送られてきたメールを解析し画像とログを保存するプログラム(pop.php)だけを 使いPOP3サーバのアドレスやパスワードなど設定し、携帯から送信しました。 そしてpop.phpにアクセスするときちんと画像と送信内容が書き込まれました。 これを利用して、cronで一定時間にpop.phpを起動させているのですが、 保存も送信内容も書き込まれません。 また、cronとは別なアドレスを用意し指定する宛先にメールが届いたらpop.phpを起動するというのも試しましたが保存されません。 ―――――――――― フォルダ構成です pop.php  //受信・解析 data/s //画像 mail.cgi //送信内容保存ファイル ―――――――――― また、どちらも動いています。(動いているか確認するために自分宛にメールを送信する処理を加えてみました。) WEBからアクセスするのとcronなどでプログラムを呼び出すのは違うのでしょうか。 エラーもなくWEBからアクセスすると保存されるので悩んでおります。 どなたかご教授いただけませんでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 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
  • cronでcgiやphpを定期的に実行させたい

    cronが使用できる、レンタルサーバを利用しており、cronの設定はWEB上からコントロールパネルへアクセスして、日時やコマンドを入力できるようになっています。 cronで定期的にphpやcgiを実行させたいと思うのですが、このような事は可能でしょうか? 初めてcronに挑戦してみようと思っていますので、詳しくアドバイスを頂けると助かります。 よろしくお願いします。

  • cronの稼動時刻について

    質問させていただきます。 cronで22時にメール送信処理が入っているphpファイルをキックし、メール送信するフローになっています。 このphpプログラムを手動で叩くとリアルタイムでメール送信され、あて先に自身を入れておくとリアルタイムで受信します。 しかし、cronでキックされたphpプログラムにより送信されたメールはなぜか翌朝の10時に受信します。 サーバー内のログには22時に実行されたログが残っております。 この謎の意味がわかる方がおりましたらお助けください。

  • cronを使って、CSVファイルのデータをMYSQLへ定期的に投入したい

    cronを使って、CSVファイルのデータをMYSQLへ定期的に投入したいのですが、 色々試行錯誤してみてもうまくいきません。 (試しにmkdirを実行し、cronが動作していることは確認済みです) 以下が試行錯誤の内容です。 【1】 MYSQLIMPORT文を使用。 mysqlimport --host=ホスト名 -u ユーザ名 --password=パスワード --local --replace DB名 "ファイル名(フルパス)" SSHからの実行で動作確認をした文をそのままcronに登録しましたが、データは投入されず。 【2】 LOAD DATA INFILE文を使用 mysql --local-infile=1 --host=ホスト名 -u ユーザ名 --password=パスワード <<eof use DB名; LOAD DATA LOCAL INFILE 'ファイル名(フルパス)' INTO TABLE テーブル名 FIELDS TERMINATED BY ','; 命令はShellにまとめて書き、呼び出しました。 同様にSSHでは動作したものの、cronでは動作せず。 【3】 まずはDBを更新できるかどうかの確認を行うため、MYSQL接続とINSERT文をShellに書き出しました。 mysql --host=ホスト名 -u ユーザ名 --password=パスワード <<eof use DB名; INSERT INTO テーブル名 VALUES (1,1,1,1,1); SSHで動作確認したShellをcronで実行させたが、更新されず。 【4】 PHPスクリプトの実行 PHPを使って更新出来ないかテスト。 こちらもSSHでは動作したものの、cronとなると動作せず。 単純なINSERT文すら実行出来ないことから、cronではレコードを更新できないのでは?と思い始めております。 なにか設定が必要だったり、見落としている点があれば、ご教授ください。 サーバーはさくらサーバーで、MYSQLのバージョンは4です。 cron以外での実装方法があれば、そちらも併せてご教授ください。 よろしくお願いします。

  • cron で *.pl を実行してるんですが何故?

    FreeBSD にて、perl プログラムを定期的に動かしたい んです。( はっきり言えばメールの送受信をしたい ) これは当然、crontab を使うかと思うのですが、 * * * * * /home/public_html/cgi/pop3_Soushin.pl ・・・のように、crontbab -e でスクリプトの絶対パス を書いて、成功するのをじーっと待っていると、 /home/public_html/cgi/pop3_Soushin.pl : not found ・・・という、やるせないメールが飛んでくるのです。 一体どうしてでしょうか・・・パス、大文字、小文字は 何度も確かめたですが、間違いはないようです。 初心者の単純なミスなのかもしれませんが、解決策を ご存知の方、どうかよろしくお願いします。m(__)m

  • cronが動かない

    cron初心者なのでお願いいたします。 fedora5で以下のようなCronを動かそうとしています。 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin HOME=/htdocs/program 45 18 * * * perl U9901.pl rootで作成し、/var/spool/cronのrootの実行権限は755になっています。 しかし実行されません。 編集後、crondは再起動しています。 どのような原因が考えられますでしょうか? 過去ログも見たのですが、それらしいものが無かったので質問させてください。 お願いします。

  • phpスクリプトのみで定期実行

    PHPのプログラムのみで5分に1回くらいサーバーにアクセスしメールチェックしたい。 現状サーバーにアクセスしメールチェックするとこまで完成してるのですが、定期的にアクセスする方法で苦戦してます。 条件的には (1)PCは切りたい (2)cronは使用できません (3)cgi等も使用できません PHP無限ループ+タイマーで自動実行風にできるでしょうか? 詳しい方、ご回答よろしくおねがします。

    • ベストアンサー
    • PHP
  • 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
  • 現在あるサーバー(Aサーバー)のcronで次のようなコマンドでperl

    現在あるサーバー(Aサーバー)のcronで次のようなコマンドでperlのスクリプトを動かしています。 cd /home/saarisa/www/; ./tools/runtask これを他のサーバー(Bサーバー)から動かしたいと思い下記のようなSHELLスクリプトをAサーバーに作ってそれを実行したいのですがこのSHELLスクリプトの実行方法がわかりません どうしたら実行できるのでしょうか? #!/bin/sh cd /home/saarisa/www/mt/; ./tools/run-periodic-tasks 1.BサーバーのCRONから実行 2.BサーバーのPHPから実行 3.HTMLからクリックして実行 4.BサーバーからAサーバーのPERLを直接実行 どの方法でもかまいません。 (AサーバーはPHPは動かず、Bサーバーはphpが動きます。) よろしくお願いします。