PDA

View Full Version : CRONでステップメールを定時に送りたいのですが・・・


kmr-yoshi
2007/03/24, 01:29 AM
XREAでは初歩的質問になるかもしれませんが、
関連するスレッドが見つからないので、質問させていただきます。

現在、XREAで借りているサーバーに、
オートステップメール(楽メール)を設置して運用しています。

自分のホームページに仕込んだタグを配信のきっかけにすると、
深夜に配信されたりするので、cronで定時に送ろうと奮闘しています。

Webで探した情報で、次のシェルスクリプトを
cron-1.shとしてルートディレクトリにおきました。

#!/bin/sh
#PERL
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
exit

そしてcronジョブの設定を /virtual/アカウント名/cron-1.shとして、
時間指定を12時半にするために 30 12 * * * としました。

しかし、うまく配信されません。

どこが、間違っているのか推定でも構いませんので、
お教えいただけると助かります。

ちなみに、send.cgi 、cron-1.sh ともパーミッションは705にしています。

よろしくお願いいたします。




distribute/cgi-bin/send.cgi

shimix
2007/03/24, 04:42 AM
cron実行後にエラーメールは届きますか?

設置されているcgiで動作上の問題があったときに標準出力へのエラー出力はありますか?cgiからの出力がないと「実行結果」メールはなかったかもしれないので、cgiの最後にprint "finished\n";だけでも追加しておくといいかもしれません。

(以下蛇足)
「オートステップメール」というのは登録商標なので、楽メールのサイトでもステップメールCGIとしか表示されてませんね。それにしても「本日最初のアクセス」のタイミングを「設定した時刻以降の」にしてくれればいいのになぁ。けっこういいお値段のソフトなんだから(ぶつぶつ・・

(追記)
ちなみにCGI内のpathはフルパス(サーバパス)で書き直されてますよね?cronだと相対pathは使えないと思うので。

#呼び出す前にcdしていれば別ですが、そういう記述はないようですし

kmr-yoshi
2007/03/24, 05:26 PM
shimix さま、お世話になります。
cron実行後にエラーメールは届きますか?
エラーメールは届いていません。


設置されているcgiで動作上の問題があったときに標準出力へのエラー出力はありますか?
すいません。御指摘事項の「標準出力」という意味がわかりません。


cgiからの出力がないと「実行結果」メールはなかったかもしれないので、cgiの最後にprint "finished\n";だけでも追加しておくといいかもしれません。

perlの基礎知識が無いのですが、
send.cgiのファイル最後に
print "finished\n";
とだけ書き込めば良いのでしょうか?
そうであれば、やってみます。

ちなみにcron-1.shの内容、

#!/bin/sh
#PERL
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
exit

は、Webにあったシェルスクリプトの例を見て、最初は
#!/usr/local/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
exit

としていたのですが、楽メールの他のcgiファイルの1行目(perlへのパス?)を見ると、
localが無かったので後で抜きました。
これは正しかったのでしょうか?


ちなみにCGI内のpathはフルパス(サーバパス)で書き直されてますよね?cronだと相対pathは使えないと思うので。
#呼び出す前にcdしていれば別ですが、そういう記述はないようですし
はい、書き直しています(正しいかどうかは別として)。

楽メールの解説に従っているだけなので、
今ひとつ自信がありません。

config.pl内では
$myroot = '/virtual/アカウント名/public_html/distribute/'; # 最後に/を付ける
 ↑
楽メールの解説では
”「distribute」ディレクトリをカレントディレクトリとして絶対パスで指定してください”とあります。

send.cgi内では
require '/virtual/アカウント名/public_html/distribute/cgi-bin/config.pl';

としています。

メールを配信するときに、
これらの記述がどういう順序で実行されているのか理解していないので、
自分では動作しない原因を探すことができないのです。


よろしくお願いいたします。

shimix
2007/03/24, 06:08 PM
send.cgiのファイル最後に
print "finished\n";
とだけ書き込めば良いのでしょうか?
ファイルの最後とは限らないので、ソースが読めないようであれば止めたほうがいいでしょうね。cron-1.shを
#!/bin/sh
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
echo "finish"
exit
と書き替えてみたほうがいいかもしれません。エラーメールが着いていないということなので、とりあえず「cronが動作しているか」だけの確認です(汗

kmr-yoshi
2007/03/25, 08:46 PM
ファイルの最後とは限らないので、ソースが読めないようであれば止めたほうがいいでしょうね。cron-1.shを
#!/bin/sh
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
echo "finish"
exit
と書き替えてみたほうがいいかもしれません。エラーメールが着いていないということなので、とりあえず「cronが動作しているか」だけの確認です(汗
cron-1.shをご指示の通り書き換えてみました。

お恥ずかしい質問で恐縮ですが、
echo "finish"を加えると、どうやって動作が確認できるのでしょうか。

とりあえず、本日のcronの指定時間を過ぎてもエラーメールは来ませんでした。

このエラーメールも、一体どのアドレスに来るのか、
よく分かっていないのですが・・・

この知識レベルで、XREAを使うのはずうすうしいと思われてもしょうがないですが、
もうここまで聞いてしまったので、恥を忍んでお聞きします。

shimix
2007/03/26, 01:21 AM
お恥ずかしい質問で恐縮ですが、
echo "finish"を加えると、どうやって動作が確認できるのでしょうか。
(cronが実行されたら)job終了メールを確実に受け取るためです。jobを実行しても何も出力がない場合にはjob終了のメールは送られないハズです(エラーが発生していればエラー通知メールは送られる)。cron-1.shで起動しているCGIが何も(標準出力に)出力がないとすると、実行されていないのか実行したけれど思った動作をしていないのかがわかりませんから。

とりあえず、本日のcronの指定時間を過ぎてもエラーメールは来ませんでした。
問題がなければ、動作確認できるまでは「毎時00分」などに設定変更されることをお勧めします。一日一回の動作を待っているのはちょっと無駄に思えるので・・

このエラーメールも、一体どのアドレスに来るのか、
よく分かっていないのですが・・・XREAアカウントのアドレス(YourID@sxx.xrea.com)に着くハズです。

sasshi
2007/03/26, 11:30 AM
僕もこの楽メールの設置でかなり悩んでいる者の一人です。
シェルスクリプトの書き方も分からない初心者ですが、このスレッドが正しければ参考にさせて頂こうと思うのですが、これで設置できたのか結果を知りたいです。


お話の流れを見ているとshimixさんも楽メールを設置しておられるご様子ですね。

shimix
2007/03/26, 12:51 PM
お話の流れを見ているとshimixさんも楽メールを設置しておられるご様子ですね。
こんな高額なものはとても買えないです。必要に迫られれば自分で作る可能性はありますが、自前のサーバに設置するでしょうね(あまり共用サーバに置くようなシステムでもないような・・)。

#似たようなことは(イントラのサーバで)やってはいますが、社内向けシステムなので(汗

楽メールのソースを持っていれば、cron用に改造する部分のアドバイスも出来るのですが、残念ながら持っていません。負荷などもhttpでの実行が出来ているようなので問題ないだろうと推測するしかないわけです。

(追記)
単に
自分のホームページに仕込んだタグを配信のきっかけにすると、
深夜に配信されたりするのが問題であれば、JavaScriptで「一定時刻以降のみ」にすればいいと思うのですけどね。楽メールのサイトのFAQにあるタグが
<script language="JavaScript"><!--
myIMG = new Image();
myIMG.src = 'http://www.*****/distribute/cgi-bin/send.cgi?run';
// --></script>
となっているのを<script language="JavaScript"><!--
wDate = new Date();
wHour = wDate.getHours();
if (wHour > 11) {
myIMG = new Image();
myIMG.src = 'http://www.*****/distribute/cgi-bin/send.cgi?run';
}
// --></script>にしてみたらどうでしょう?

#私なら(どうしてもcronで動作しなければ)ロ-カルのPCから定時にアクセスするように仕込みますけどね。

(追記)
ソースがないので、send.cgiが引数なしで動作するのかどうかもよくわかりません。cronなので(本来が引数が必要だとしたら)引数がなくても動作するように改造しているという前提で回答していますが、「Webで探した情報」というだけの根拠なので・・。

sasshi
2007/03/26, 09:42 PM
これすごいですね:eek:

<script language="JavaScript"><!--
wDate = new Date();
wHour = wDate.getHours();
if (wHour > 11) {
myIMG = new Image();
myIMG.src = 'http://www.*****/distribute/cgi-bin/send.cgi?run';
}
// --></script>

楽メールサポートに早速問い合わせたところ、これでいけるのでは?といったお返事を頂きました。
これを使えば朝11時以降アクセスがされるたび、起動されるわけですよね??

でも僕としてはここまで来た以上クーロンでなんとか対応させたいところです。



ところで一つ気になったのですが、
shimixさんが書かれたシェルスクリプトの中身

#!/bin/sh
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
echo "finish"
exit

これは僕のと全然違ってました:eek:

僕はxreaのcronのコントロールパネルの下にあったシェルスクリプトの例として表示されていたものをコピペしてエディタでcron.shとして書き出してffftpでアップしてました。

以下その例です。【****がIDです。】

#!/bin/sh

#PERL
/usr/local/bin/perl /virtual/****/cron_exe.pl
#SHELL
/bin/sh /virtual/****/cron_exe.sh
#PHP
/usr/local/bin/php /virtual/****/cron_exe.php
#RUBY
/usr/local/bin/ruby /virtual/****/cron_exe.rb
#C/C++
/virtual/****/cron_exe

exit

これに設定した後、クーロン設定時刻にこんなエラーメールが送られてきました。

Can't open perl script "/virtual/****/cron_exe.pl": No such file or
directory
/bin/sh: /virtual/****/cron_exe.sh: No such file or directory
Status: 404
Content-type: text/html

No input file specified.
/usr/local/bin/ruby: No such file or directory --
/virtual/****/cron_exe.rb (LoadError)
/virtual/****/public_html/clon1.sh: line 12: /virtual/****/cron_exe: No
such file or directory


これは該当するファイルがなかったといった趣旨のようですが、設定自体はうまくいっているということなのでしょうか??

まだステップメールのこうした設定はしたものの、肝心の原稿をアップしていなかったのでこういうエラーメールがきたのかなと考えているのですが。
それともやはりshimixさんが書かれたように、

#!/bin/sh
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
echo "finish"
exit

と記述すべきなんでしょうか??
ご教授お願い致します。

shimix
2007/03/26, 10:16 PM
これを使えば朝11時以降アクセスがされるたび、起動されるわけですよね??12時以降ですね(11時台は含まない)。私はJavaScriptはほとんど書かないのですが、このくらいは・・

ところで一つ気になったのですが、
shimixさんが書かれたシェルスクリプトの中身

#!/bin/sh
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
echo "finish"
exit
これは元記事でkmr-yoshiさんが書かれたものにechoを追加しただけですね。

XREAのサンプルにあるcron_exe.plとかcron_exe.phpはあくまでも例として示されています。実際にはこの位置にこのファイルがなければいけません。cronが動作はしたものの、cron_exe.plなどがないのでエラーメールが着いたのだと思います。send.cgiをperlから起動する・・でいいとは思うのですが、このあたりはソースを読んでいないので何とも言えません。kmr-yoshiさんはどこからかcronjobの設定例を探し出したようなのですが、そのリソースも示されてはいないので、私も推測モード&手探り状態です(汗

sasshi
2007/03/26, 10:31 PM
先ほどshimixさんの追加されたシェルに書き換えてからエラーメールが送られてきました。


Can't locate ./config.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/distribute/cgi-bin/send.cgi line 11.
finish


このような内容です。

/config.plの場所を見つけることができません。という内容のようです。
色々と親切に教えて頂き本当にありがとうございます。
なんだか僕がこのスレをたてたみたいになりつつありますが:o
shimixさんが必要とされるソースはどのあたりなのでしょうか?
できる範囲でお見せしたいのですが。

shimix
2007/03/26, 10:37 PM
/config.plの場所を見つけることができません。という内容のようです。
えっと・・send.cgiの中でpathを書き替えないといけないハズです(cronで実行されるのでpathが違ってくる)。kmr-yoshiさんが書かれたようにsend.cgiでconfig.plを要求している部分はrequire '/virtual/アカウント名/public_html/distribute/cgi-bin/config.pl';に書き替えないといけません(config.plの場所をフルパスで指定)。config.plの方はすでに$myroot = '/virtual/アカウント名/public_html/distribute/'; # 最後に/を付けるになっているとは思いますが・・

sasshi
2007/03/26, 11:04 PM
なってませんでした:mad:
ffftpでサーバー側のを直接編集できないんですね。
うっかりしてました。
編集して上書きしたつもりになっていたのですが再度確認したらデフォルトの状態でした:p

今回、このcgiをSSL領域に設置したのでconfig.plの中の登録用urlに関して

# 登録用(URL)
$applycgi = 'https://ss2.xrea.com/****.s253.xrea.com/distribute/cgi-bin/apply.cgi';

とSSLサーバーのパスにしていますがこの記述は大丈夫でしょうか?


あと、このエラーメール。メールマガジンを登録された方に送られてしまっているということはないですよね:(

shimix
2007/03/26, 11:30 PM
# 登録用(URL)
$applycgi = 'https://ss2.xrea.com/****.s253.xrea.com/distribute/cgi-bin/apply.cgi';

とSSLサーバーのパスにしていますがこの記述は大丈夫でしょうか?おそらく(完全に推測モードですが)send.cgiでは参照していないと思われます。大丈夫でしょう。


あと、このエラーメール。メールマガジンを登録された方に送られてしまっているということはないですよね:(cronの実行結果&エラーメールはXREAのアカウントメール宛ですから、その心配はないです。

引数にrunがなくてもいいのかどうかが気になりますが、こればかりはsend.cgiのソースを読むしかないですね(汗

kmr-yoshi
2007/03/26, 11:32 PM
kmr-yoshiさんはどこからかcronjobの設定例を探し出したようなのですが、そのリソースも示されてはいないので、私も推測モード&手探り状態です(汗

リソースはこちらです
 ↓
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1709297

本日、しばらくサポートボードを覗かなかった間に、
sasshiさんが加わって活発な投稿があったので驚きました。

cronが動作しないなら、JavaScriptで「一定時刻以降のみ」にするというのは、
スクリプトが書ける人から見たら、造作もない無いことなのですね。

今、そちらに心が動きかかっていますが、
コンテンツにからめて定時配信をしたいので、
cronによる配信実行はできるようにしておきたいのです。
とりあえず、cronを毎正時に設定して様子をみます。

(追記)
ソースがないので、send.cgiが引数なしで動作するのかどうかもよくわかりません。cronなので(本来が引数が必要だとしたら)引数がなくても動作するように改造しているという前提で回答していますが、「Webで探した情報」というだけの根拠なので・・。
この引数なしでsend.cgiが動作するかというのは、
わたしもわかっていません。

楽メールの解説では、次のようになっています。

▼設定

telnetなどのターミナルでサーバーに接続します。

■ 現在の設定を見る
$ crontab -l

■ 設定を変更する
$ crontab -e

■ 設定内容の削除
$ crontab -r

設定する前と設定した後に内容を確認してください。

EDITOR環境変数に好みのエディタ名を定義したうえで

$ crontab -e

コマンド書式は,[分] [時] [日] [月] [曜日] [スクリプトの絶対パス]
分 : 01〜59
時 : 1〜24
日 : 1〜31
曜日: 0(日曜)〜6(土曜)
書式はスペースまたはタブで区切ります。

例:
0 12 * * * /home/user/public_html/distribute/send.cgi
毎日、昼の12時にメール送信システムを実行します。

クーロンデーモンの実行結果はメールで自分自身に知らされます。
メールを送ってほしくない場合は、
0 12 * * * /home/user/public_html/distribute/send.cgi 1> /dev/null
としてください。この場合はエラーが起こった時だけ (標準エラー出力に出力があった時だけ)メールが送られてきます。
この前半の部分は理解できていません。

XERAにcronJOBの設定画面があるので、
必要ないのかなくらいに思っていました。

shimixさんから見たら、すぐわかるとんでもない間違いが、
どこかに潜んでいるのでは?

shimix
2007/03/26, 11:55 PM
XERAにcronJOBの設定画面があるので、
必要ないのかなくらいに思っていました。
そういう認識でいいと思います。

で、下記の2つを試してみていただけますか?send.plはsend.cgiの1行目(Perlのpath)を消したものをsend.cgiと同じ場所に置いてください。perlの引数としてファイル指定するときは1行目のコマンドの指定は不要なので重複しているのが何かマズイかなぁと(自信なしです)。

【cron-1.sh】#!/bin/sh
/virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
echo "finish cron-1"
exit
【cron-2.sh】#!/bin/sh
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.pl
echo "finish cron-2"
exit


#実はXREAでperlのcronは動かしたことがないのです(shellはあるんですけどね)。CGIならローカルから定期的に叩くほうが手っ取り早いし(汗

sasshi
2007/03/27, 12:06 AM
kmr-yoshiさんこんばんは:)
丁度僕も気がかりだったので本当に助かりました。
実はgooも既にチェックしていてこれは同じ方ではないかなと考えていました;)


shimixさんありがとうございます。
今回ついにエラーメールはきませんでした:)

代わりにこれまで配信していなかったステップメールの空メールが連続で配信されてしまいましたが・・・

文面も空のままだったのでこれはこれでちょっとピンチですが。
でもcronはなんとかこれで全て解決したので本当に良かったです^^
色々と丁寧なご指導をしてくださり本当にありがとうございました:o

kmr-yoshiさん
僕もターミナルとか意味わかりませんでした。
しかし、xreaではこの情報は必要でないのかなと思います。


僕がたどり着いた流れを書いておきますね。

1 kmr-yoshiさんがかかれた

#!/bin/sh
/usr/bin/perl /virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
echo "finish"
exit

でシェルをつくりアップロードする。


2 xreaのクーロンジョブで分、時、日などの数字を割り振り、すぐ下のテキストボックスにパスをかく。
public_html/clon.sh

3ちゃんとconfig.pl、send.cgiのパスを書き換える

恐らくこれでkmr-yoshiさんも設定完了すると思います。
いいスレをたてて下さりありがとうございました。

shimixさん重ねてお礼申し上げます。
本当にありがとうございました。

craft
2007/03/27, 12:12 AM
cronの場合はsend.cgiに引数はいらないと思います。
説明にも書いてないし

send.cgi?runにすると画像を出力するんじゃないですかね


ところで直接アクセスしたらちゃんと動作はするんですか?>kmr-yoshi さん
http://〜〜/distribute/cgi-bin/send.cgi


直接アクセスできてよいのか、という問題はさておき
できるんですよね?

[ついき]
でも、パスとか変えたならと思いまして。>↓shimixさん

shimix
2007/03/27, 12:16 AM
あ、元記事の記述でよかったんですね(perlのcronが未経験なので不安だった・・)。

エラーメールは着かなかったということですが、実行結果メールは着いていますか?finishの出力を入れているので結果が着くかな・・と思っているのですが、send.cgiが妙な処理をしているとどうかなぁと。このあたりはちょっと推測できないので、教えていただけると有難いです。

(追記)
ところで直接アクセスしたらちゃんと動作はするんですか?
http://~~/distribute/cgi-bin/send.cgi
「タグで書くと夜中に送られて」ということだったで、そのあたりの確認は終わっていると思ってましたが甘かったかな?どうでしょうか?>kmr-yoshiさん

sasshi
2007/03/27, 12:24 AM
メルマガ読者に送られるメールとは別に何か特別にメールが送られるということはありませんでした。
それともこのメルマガ読者メールが送られてくるという事自体が実行結果になっているんでしょうかね:confused:

あと、claftさん。すみません。僕の場合はまだメールは登録はできるものの配信は未稼働だったのでわかりません。

一応楽メール様の説明では、ページにアクセスした都度起動されるとのことですが。
この点はkmr-yoshiさんがご存知かもしれませんね:o

shimix
2007/03/27, 12:40 AM
メルマガ読者に送られるメールとは別に何か特別にメールが送られるということはありませんでした。
それともこのメルマガ読者メールが送られてくるという事自体が実行結果になっているんでしょうかね
そうですか・・。ちょっとsend.cgiの動作が読めないのでわからないのですがメールを送るという動作だけで何も出力がないんでしょうか?(引数にrunを与えると画像を返す?)直接アクセスしたら何か画面には表示されますか?普通はその内容が実行結果メールになると思ったのですが、content-typeに依存するんですかね>cronの実行結果メール。

#send.cgiの起動前にechoしたらどうなんでしょう(単なる技術的興味<おい)。

kmr-yoshi
2007/03/27, 02:11 AM
sasshiさん動いたみたいで良かったですね。

わたくしも、同じようにやっているつもりなんですが、
どこかが違っているんでしょうね。

shimixさんのアドバイス、
今度やってみます。

というのは、明日(もう今日か…)早朝から離島に出張なので、
戻ってからにします。(27日夜戻り)

craftさん、アドバイスありがとうございます。

ご質問の件ですが、
send.cgiに直接アクセスすると、ちゃんと配信されます。

ですから今は、毎日マニュアル送信状態なのです。

早く、解決したい。(汗

kmr-yoshi
2007/03/28, 11:59 PM
出張から帰ってきて、
じっくりと腰を据えて間違い探しをしてみました。

そうしたら何と、シェルスクリプトの中のアカウント名を、
一文字間違えているではありませんか!

これで解決!と思い、修正してアップしましたが、
やはり動きません・・・・・・・・・・・・。

ハァ〜、ぬか喜びでした。

あと、考えられることとして、sasshiさんが次のように書かれているので、

2 xreaのクーロンジョブで分、時、日などの数字を割り振り、すぐ下のテキストボックスにパスをかく。
public_html/clon.sh
シェルスクリプトをルートディレクトリではなく、
public_htmlフォルダ内に置いてもみましたが、
やっぱり動きません。

そもそも、このシェルスクリプトというのは、どこに置いてもいいのでしょうか?

public_html内に置かないと動かないとか?


あと、フォルダパスのところで、いま一つ知識が曖昧なところがあります。

あるドメインをドメインウェブのMainに割り当てているので、
楽メールへの最初のアクセスは、
設定ドメイン/distribute/cgi-bin/index.cgi
になっています。

distributeフォルダは/public_html下に置いています。

config.plへのパスはgetpath.cgiで確認したので、
次で間違いはないと思うのです。

/virtual/アカウント名/public_html/distribute/cgi-bin/config.pl

実際にこのパスに書き換えてから、send.cgiにマニュアルでアクセスすると、
配信が行われるので、問題はないと思っていました。

Mainへのドメイン割り当てが問題であるならば、
Mainを空にして、public_html下に置いていたサイト用フォルダを、
設定ドメインフォルダ内に移そうと思います。

ただし、三年ほど前に作ったサイトなので、
どのフォルダが必要なのか自分でもよく分からなくなっていることが、
移すことをためらわせております。(汗

今日はくたびれてしまったので、
shimixさんの2007/03/26 11:55 PMのご提案は、
明日やってみます。

kmr-yoshi
2007/03/29, 07:43 PM
エラーメールは着かなかったということですが、実行結果メールは着いていますか?finishの出力を入れているので結果が着くかな・・と思っているのですが、send.cgiが妙な処理をしているとどうかなぁと。このあたりはちょっと推測できないので、教えていただけると有難いです。
このことに関して少し進展がありました。

まず動いていないのに、エラーメールさえ来ないという事がおかしいと思ったので、
自分の○○○@s**.xrea.comにテストメールを送ったところ、
昔解約したプロバイダのメールアドレスに転送したままにしている事が分かりました。

久しぶりに管理メニューを開いて、
転送メールアドレス設定を修正しました。

3年も経つと、転送していた事も完全に忘れていました。

   これ、言い訳ですね。すいません。(汗

するとcronの動作状況を知らせる以下のメールがきました。

Can't open perl script "/virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi
": No such file or directory
finish
/virtual/アカウント名/cron-1.sh: exit
: command not found
つまり、「そんなファイルやディレクトリはないから、perlスクリプトは実行できん」
ということらしいのです。

このメッセージが来るという事は、
シェルスクリプトは実行されていると解釈して良いのでしょうか。

何度確認しても、このパスに間違いは無いと思うのですが…。
getpath.cgiで出てきたものを、コピペしているので、
スペルミスは無いと思います。

また、最後の3行の意味がよく分かりません。

「シェルスクリプトのコマンドが見つからなかった」と読めます。

このエラーメッセージから、何か落とし穴が分かる方がいますか?

shimix
2007/03/29, 09:15 PM
つまり、「そんなファイルやディレクトリはないから、perlスクリプトは実行できん」
ということらしいのです。

このメッセージが来るという事は、
シェルスクリプトは実行されていると解釈して良いのでしょうか。
cronjobの実行はキチンと行われていますね。「/virtual/アカウント名/public_html/distribute/cgi-bin/send.cgiがない」ということなのですが、distributeディレクトリはpublic_htmlの直下で間違いないですよね?(もちろんそれ以下のpathも合致しているハズですが・・)。
また、最後の3行の意味がよく分かりません。

「シェルスクリプトのコマンドが見つからなかった」と読めます。exitが認識されなかったみたいですね。最後の改行はありますか?

・・と、ここで思い当たったのですが、改行は「LFのみ」になっていますか?CRLFになっているとCRが付加されてしまうので、exit[cr]はコマンドとして認識されないし、/virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi[cr]というファイルも探せないと思います。cron-1.shの改行コードを確認してください。

#cgiなどと同様にテキスト(ascii)モードで転送しないといけません>sh。

kmr-yoshi
2007/03/29, 11:17 PM
・・と、ここで思い当たったのですが、改行は「LFのみ」になっていますか?CRLFになっているとCRが付加されてしまうので、exit[cr]はコマンドとして認識されないし、/virtual/アカウント名/public_html/distribute/cgi-bin/send.cgi[cr]というファイルも探せないと思います。cron-1.shの改行コードを確認してください。

#cgiなどと同様にテキスト(ascii)モードで転送しないといけません>sh。
やっと動きましたアアアアア!!!

shimixさん、本当にありがとうございました。

改行にCRとLFという区別があることなど、
知りませんでした。

FFFTPは、指定した拡張子のファイルを、
自動的にアスキーモードで転送する機能がついているのですが、
defaultのままで使っていたので、シェルは入っていませんでした。

その指定拡張子にシェル(*.sh)を入れて、
転送し直したところ、御指摘の通り、
不要な[CR]を消して、きちんと実行してくれたようです。

随分と遠回りしましたが、良い勉強になりました。

重ねて御礼申し上げます。

この、スレッドが同様の悩みを抱えるたくさんの人の問題解決に繋がることを祈っております。