• ベストアンサー

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

  • naru
  • お礼率76% (155/202)

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

  • ベストアンサー
  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

念のためpop3_Soushin.plの置いてあるディレクトリに移動してpwdコマンドを実行してみて下さい。 表向きと実際のディレクトリ構成が違う場合もありますので…。 もし違っていたらそちらのパスに書き換えましょう。

naru
質問者

お礼

この件、うんうんやってたらなんとか解決しました。 ありがとうございます。 cron の 設定をテキストファイルでアップしてから、 シェル上で、crontab my_contab のように設定してたの ですが、それがどうもいけなかったようです。 ファイルを転送したら、まずはそのファイルに対し、 一度は vi で入っておいて、更新するといいようです。 ご面倒をおかけしました。

naru
質問者

補足

回答ありがとうございます。 さっそく調べてみましたが、やはり間違いがないよう です。 もう、しばらく悩んでみます。。。

その他の回答 (5)

  • ken2
  • ベストアンサー率36% (86/235)
回答No.6

答えになっているかどうかはわかりませんが、cronを使った場合は、実際に同じコマンドを打つ場合と異なる点として、環境変数がセットされないということがあります。この場合は、/home/public_html/cgi/pop3_Soushin.pl ということで、絶対パスなので、ここについては問題ないと思いますが、スクリプトの中身は、絶対パスになっているでしょうか?もしくは、環境変数が(たとえば、PATH)がきちんとセットとされているでしょうか? もしくは、 /usr/local/bin/perl /home/public_html/cgi/pop3_Soushin.pl のような記述にしてみたらどうでしょうか?(あまり関係ないと思うけど・・・)

naru
質問者

お礼

この件、うんうんやってたらなんとか解決しました。 ありがとうございます。 cron の 設定をテキストファイルでアップしてから、 シェル上で、crontab my_contab のように設定してたの ですが、それがどうもいけなかったようです。 ファイルを転送したら、まずはそのファイルに対し、 一度は vi で入っておいて、更新するといいようです。 ご面倒をおかけしました。

  • natural
  • ベストアンサー率37% (419/1115)
回答No.5

ちょっと気になったのですが、 >/home/public_html/cgi/pop3_Soushin.pl >: not found は2行に分かれて出力されたのでしょうか? また、エラーメッセージはこれで全文ですか? 補足お願いします。

naru
質問者

お礼

この件、うんうんやってたらなんとか解決しました。 ありがとうございます。 エラーメッセージはそれで全文です。2行です。 cron の 設定をテキストファイルでアップしてから、 シェル上で、crontab my_contab のように設定してたの ですが、それがどうもいけなかったようです。 ファイルを転送したら、まずはそのファイルに対し、 一度は vi で入っておいて、更新するといいようです。 ご面倒をおかけしました。

noname#4147
noname#4147
回答No.4

crontbab -e を設定したユーザーで、実際に /home/public_html/cgi/pop3_Soushin.pl を実行することが出来ますか? pop3_Soushin.pl自体のパーミッションだけでなく、 上位のディレクトリのパーミッションが原因の可能性もあります。

naru
質問者

お礼

この件、うんうんやってたらなんとか解決しました。 ありがとうございます。 cron の 設定をテキストファイルでアップしてから、 シェル上で、crontab my_contab のように設定してたの ですが、それがどうもいけなかったようです。 ファイルを転送したら、まずはそのファイルに対し、 一度は vi で入っておいて、更新するといいようです。 ご面倒をおかけしました。

  • h-kiku
  • ベストアンサー率50% (22/44)
回答No.3

/home/public_html/cgi/pop3_Soushin.pl の1行目に記述してある perl の絶対パスが 違っていたりしませんか?? #!/usr/bin/perl とか #!/usr/local/bin/perl になっている部分を確認してみてください.

naru
質問者

お礼

ご回答ありがとうございます。 間違いはありません。 ほんとにふに落ちないので、サーバー業者にやいのやいの と聞いてみることにします。

naru
質問者

補足

この件、うんうんやってたらなんとか解決しました。 ありがとうございます。 cron の 設定をテキストファイルでアップしてから、 シェル上で、crontab my_contab のように設定してたの ですが、それがどうもいけなかったようです。 ファイルを転送したら、まずはそのファイルに対し、 一度は vi で入っておいて、更新するといいようです。 ご面倒をおかけしました。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> 一体どうしてでしょうか・・・パス、大文字、小文字は > 何度も確かめたですが、間違いはないようです。 を信じるならば、その pop3_Soushin.pl というファイルに実行権限が ついていないということが原因かと思います。 cron は、その登録したユーザの権限で実行されますので、例えば、 naru というユーザで crontab -e で設定をしたのであれば、その naru というユーザに対する実行権限が必要です。

naru
質問者

お礼

この件、うんうんやってたらなんとか解決しました。 ありがとうございます。 cron の 設定をテキストファイルでアップしてから、 シェル上で、crontab my_contab のように設定してたの ですが、それがどうもいけなかったようです。 ファイルを転送したら、まずはそのファイルに対し、 一度は vi で入っておいて、更新するといいようです。 ご面倒をおかけしました。

naru
質問者

補足

実行権限はあってるとおもうのです。。。 一応、サーバーの業者に今問い合わせてみます。 回答ありがとうございました。

関連するQ&A

  • fml の crontab の設定でこれはなんでしょう?

    FreeBSD で、fml を運用しています。 見てみると crontab に以下のように設定されているの ですが、 4 * * * * /home/public_html/fml/msend.pl /home/ml/testml -q この、/msend.pl ~ の後に続くパスの設定はなにを しているのでしょうか? 単純に、*.pl を定期的に動作させるには、 4 * * * * /home/public_html/fml/msend.pl で終わっていいような気がするのですが、しかも -q って何のオプションなのかも謎です。 ご存知の方がいましたら、よろしくお願いします。m(__)m

  • cronでのPerlスクリプト実行

    少し前に同様の質問をしましたが、やはり解決していませんでした。 #!/usr/bin/perl open(OUT,">/home/test/test.log"); print OUT "OK"; close(OUT); このスクリプトをcrontabに以下のように記述しました。 0 0 * * * /home/test/test.pl > /dev/null 2>&1 パーミッションは省略します。 このようにすると、正常にtest.logが出力されました。 しかし、本当に実行したいスクリプトを同様にしたところ、 正常に動作しませんでした。cronログには記録されます。 実際のスクリプトは長いのでここには掲載できませんが、 主な処理はおおよそ次のようなことをしています。 ・pmとplモジュールがあり、plからpmを呼び出している。 ・plもpmも自作のユーザ関数の組み合わせ ・ファイルはtestユーザが所有し、実行権限は777。  (動作確認後、徐々に落としていきます) ・plでは、use encoding 'utf8'。 ・スクリプトにオプションを付けて、引数を読み込む。 ・loggerでsyslogへ結果を出力。 ・子プロセスを生成して処理の一端を行わせている。 ・opendir、readdirなどを使用。 ・xxxxxx.datファイルを読み書きしている。 ・CPANにあったメール送受信モジュールを使用している。 ・ファイルをbz2圧縮している。 などです。 コマンドラインから実行すると確実に正常に動作します。 気になるのはPerlスクリプトの内容でモジュールを使うときは、 パスが通っていてもフルパス指定しないといけないのでしょうか? しかし、フルパスと言ってもせいぜいsystem()で実行するコマンドを フルパスにするくらいしか思いつきません。 うまく実行できない理由として考えられる可能性があることを 教えてもらえませんか? 根本的な解決としては、cronでの実行とコマンドラインからの実行は 何が違うのかが明確になれば対処できるのかもしれません。 よろしくお願いします。

  • Can't locate jcode.pl in @INC...

    perlスクリプトをcrontabで、   0 * * * * /フルパス と起動したところ、 上記のエラーがでます。 エラー部分は、   require './jcode.pl'; です。 requireにフルパスを打ったら、直ったんですが、なぜでしょう。 Perlの設定が悪いのでしょうか?

    • ベストアンサー
    • Perl
  • cronでPHP実行

    お世話になります。 OSはクライアントの為、恐縮ながら何を使用しているか不明となっております。 PHPバージョンは5.1.6です。 cronを使用して、毎日特定の時間に、メールを配信するPHPスクリプトを実行しようと試みているのですが、エラーメールが返ってきてしまいます。 因みに、URLを直接指定して実行した場合は正常にメールが配信されます。 設定方法は、crontab -e で 0 12 * * * /usr/lib/php -q /home/hoge/public_html/mail.php と記述しております。 返ってくるエラーメールの内容は、以下の通りです。 Content-Type: text/plain; charset=UTF-8 Auto-Submitted: auto-generated X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/home/hoge> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=hoge> X-Cron-Env: <USER=hoge> Message-Id: <xxxxxx@xxxxxxxxxx> Date: Sun, 28 Sep 2008 12:00:01 +0900 (JST) /bin/sh: /home/hoge/public_html/mail.php: Permission denied 以上、対策方法についてご存知の方がおられましたら、ご教授よろしくお願い致します。

  • cronが動かない

    cronからphpスクリプトを動かそうと設定したのですが動きません。 エラーメールやエラー表示もされません。 phpスクリプト自体は、cronを使わず手動なら動作しています。 どこか設定に異常個所などがあればご指摘やアドバイスなど頂きたいと思います。 以下に設定内容を記載します。 【crontab】 # crontab -u testuser -e 0-59/5 * * * * /usr/bin/php -q /home/testuser/public_html/mail.php 2>&1 0-59/10 * * * * /usr/bin/php -q /home/testuser/private_html/mail.php 2>&1 【cron確認】 # ls -l /var/spool/cron/ -rw------- 1 root root 251 4月 17 15:25 testuser -rw------- 1 root root 71 4月 16 18:28 root 【mail.php】 #!/usr/bin/php <?php $tim = time(); $today = gmdate("Y/m/d(D)",$tim+9*60*60); $now = gmdate("Y/m/d(D) H:i",$tim+9*60*60); mb_language("Ja") ; mb_internal_encoding("EUC-JP") ; $mailto="test@****.jp"; $mailfrom = "From:" .mb_encode_mimeheader("cronテスト") ."<" . $mailto .">"; $parameters = '-f' . $mailto; $return_path = "$mailto"; $subject="テストメール"; $body ="クーロンテスト\n"; $body .="送信年月日: $today \n"; $body .="送信時間: $now \n"; mb_send_mail( $mailto, $subject, $body, $mailfrom,"-f $return_path" ); ?> 【パーミッション】 /home/testuser/public_html/  705 /home/testuser/private_html/ 705 /home/testuser/public_html/mail.php 705 /home/testuser/private_html/mail.php 705 rootユーザーでのcronは正常に動いています。 ご教授の程、宜しくお願い致します。

  • cronの設定方法

    サーバーは、XREA CGI名は、acmailer http://www.acmailer.jp/docs/ cronで、定期的にメールを送信しようとしていますが、 説明書のとおりにしても、動作しません。 /virtual/asdfgghjkl/public_html/public_html/lib/reserve.pl という実行パスをサーバーに貼り付けて 0 ****にして 定時0分にメールを送信しようとしています。 説明書では、これだけで動くようなことが書いてあります。 http://www.acmailer.jp/docs/server/xserver/86.html これは、サーバーが違うサーバーですが、 これでけで動くのでしょうか? 正しいのでしょうか? だれか、経験者様よい知恵をお授けください。

  • コアサーバー(coreserver)でのcronの設定について

    こんにちは。 コアサーバーで、趣味のメルマガを発行することにしました。 「7日間サッカー講座」のような感じのものです。 他の目的のために、楽メール(​http://www.raku-mail.com/)​を 以前に購入していましたので、こちらを利用したいと考えています。 ところが、ステップメールを送るためのcronの設定で、苦戦しています。分かる方がいらっしゃいましたら、アドバイスをいただけると嬉しいです。 cronについては公式サポートの対象外なもので…。 ​http://www.raku-mail.com/manual/raku_setup.htm​ こちらのページに書いてあるように、楽メールを設置しました。 send.cgiをcronで毎時0分に起動させたいのです。 独自ドメインを設定しているので(ここでは仮にabc.com)、 distibuteフォルダは、 public_html/​www.abc.com/distribute​ の階層にあります。 public_htmlと同じ最上階に、cron.shを置きました。 cron.shの中身は、 #!/bin/sh #PERL /usr/local/bin/perl /virtual/アカウント名/public_html/​www.abc.com/distribute/cgi-bin/send.cgi​ exit です。 そしてcronジョブを毎時0分に起動させるように、コアサーバーの管理メニューから保存しました。 以上が、僕がネットで1から調べ、やったことです。 しかし、毎時0分になにやらエラーメールらしきものが送られてきます。 エラーメール題名:Cron <アカウント名@s59> /bin/sh /virtualアカウント名/cron.sh エラーメール本文:Can't locate /virtual/アカウント名/public_html/​www.abc.com/distribute/cgi-bin/lib/send/send.pl​ in @INC (@INC contains: /usr/local/lib/perl5/5.8.8/i686-linux /usr/local/lib/perl5/5.8.8 /usr/local/lib/perl5/site_perl/5.8.8/i686-linux /usr/local/lib/perl5/site_perl/5.8.8 /usr/local/lib/perl5/site_perl .) at /virtual/アカウント名/public_html/​www.abc.com/distribute/cgi-bin/send.cgi​ line 17. これは、僕がどこを間違えているからなのでしょうか? 分かる方がいらっしゃっいましたら、教えていただけると助かります。 よろしくお願いします。

  • crontabでtarを実行した際、エラーではないものは出力されずに実行できるコマンドを教えてください

    crontabでシェルスクリプトを立ち上げて自動バックアップをさせているのですが、crontabのレポートメールに tar: Removing leading `/' from member names と出ます。 実行内容は tar zcvf /home/__ArchiveFolder/backup_`date +%Y%m%d`.tar.gz /home/public_html なのですが、サイレントモードで実行というのでしょうか、このメッセージのメールを送られてこないように出来るのでしょうか? 言い換えますと、path名の頭に / があると、展開時に面倒が起こるから、/を取り除いてくれていいのですが、いちいちレポートしなくてもいいので、quietモード(manにはありませんでした)のようにするにはどうしたら良いのでしょうか?

  • エックスサーバーでcronを使ってMTの自動構築

    エックスサーバーにてMTを使用し複数のブログを構築しています。 その内の特定ブログだけ特定の時間に自動構築したいと思いmt-rebuild.plを導入しました。 が、肝心のcron設定を失敗しているようで動作してくれません。 (インデックスを書き換えた後に動作チェックとして数分後先を 動作時間にしているのですが書き換えた内容に変わってくれません) エックスサーバーではGUIでcron設定ができるのですが、登録(これは問題なくできます)後に 変更しようとすると『コマンドが正しく入力されていません』とエラーで弾かれるので 多分登録時のコマンドが間違っているんだろうと思います…。 エックスサーバーでのcronコマンドの設定は  /home/サーバーID/独自ドメイン名/public_html/... となっており、mt.cgi及びmt-rebuild.pl設置先は  /public_html/cgi-bin/mt なので、肝心のmt-rebuild.plを動かすには  /home/サーバーID/独自ドメイン名/public_html/cgi-bin/mt/mt-rebuild.pl と思うのですが…。ご教授願いたいと思います。

  • 'cgi-lib.pl'などのファイルの位置は?

    Perlの基本的な質問ですが、cgi-lib.plやjcode.plは どのディレクトリに入れれば自然でしょうか? 私はLinuxとWindowsの両方にPerl5.6を入れておりまして、今までは相対パスによって、スクリプトの近くに置いていましたが、ディレクトリ(フォルダ)が変わるごとに設定しなおしで面倒になってきました。 WEBでもレンタルサーバーなど利用したことは無いんですが、このような基本ライブラリは、require 'cgi-lib.pl';で呼び出して?いると思いますが、 しかるべき位置にこのファイルが無いとだめだと思います。ご教授ください。

    • ベストアンサー
    • Perl