電子書籍の厳選無料作品が豊富!

「ブログ記事をmixi日記へ自動的に投稿する為のperl(cgi)プログラム」を
コアサーバーに設置したいと考えているのですが、cronの設定で困っています。

初めてcronを使うためどこでつまずいているのか分かりません。
どんなことでも構いませんので、ご教授よろしくお願いします。


index.cgiの1行目の記述は #!/usr/bin/perlとして
/virtual/マイアカウント/mixid/index.cgi におきました。
(mixidファイルとindex.cgiの属性755)


また、cron.shを文字コードs-jis、改行コードLFで保存して
public_htmlと同じ階層におきました。
/virtual/マイアカウント/cron.sh
(cron.shの属性644)


cron.shの記述は以下のとおりです。

#!/bin/sh
#PERL
/usr/local/bin/perl /virtual/マイアカウント/mixid/index.cgi
exit


cronジョブの編集画面では、毎時0分に動作させようと
0*** /virtual/マイアカウント/cron.sh と設定しています。


今、上記のような状態で、mixiに投稿できずに
下記のエラーメールが送られてきます。

Content-type: text/html

<html>
<head>
<title></title>
</head>
<body>
OK</body>
</html>


間違っている箇所がありましたら、ご指摘をよろしくお願い致します。


コアサーバー各種パス
http://www.coreserver.jp/help/index.php/path/

「ブログ記事をmixi日記へ自動的に投稿する為のperl(cgi)プログラム」
http://pct.unifas.co.jp/%E3%83%96%E3%83%AD%E3%82 …

A 回答 (2件)

○CGIは、実行すると、HTTPのヘッダ+本体データ を標準出力に出力する、という仕様。


○cronは実行しているプロセスから標準出力に出力があるとその内容をオーナーにメールで送るという仕様

ということで、
> 下記のエラーメールが送られてきます。

これは「エラーメール」ではありません。「正常な動作」によるメールです。
少なくとも、質問文にある内容で明かな間違いはありません。ちゃんとcronが動作しperlのスクリプトが実行されています。

なので、
○メールが来るのは、CGIとしてHTMLを出力するプログラムをそのまま使っているため。
普通は出力を抑制するとか、リダイレクトするとかする。必要なログは別ファイルに残したりする
○サーバー上で使うことを前提にしているCGIをローカル環境で動作させて、期待通り動くかどうかは、スクリプトの作り方次第。そもそも無理なケースもある。
実行ユーザーとその権限も関係するかもしれない
○cronで実行するときは環境変数はすべて未定義の状態になる。環境変数に依存すること(PATHとかHOMEとか)をやっていると、期待通りに動かない。

といったあたりが疑われます。
    • good
    • 0
この回答へのお礼

kmeeさんの回答を頂いて、さらに下記のメールも届くようになったので、設定は間違ってないのだと実感できました。
IDも合ってますし…CGIはさっぱり分からないので諦めます。
本当にありがとうございました。


mixiユーザーIDを指定してください
Content-type: text/html

<html>
<head>
<title></title>
</head>
<body>
OK</body>
</html>

お礼日時:2011/10/20 18:28

>(cron.shの属性644)


・cronで動かすスクリプトに実行権がないのはなぜ?
・index.cgiを直接cronで動かさずにcron.sh経由で動かすのは何故?

>/usr/local/bin/perl /virtual/マイアカウント/mixid/index.cgi
・index.cgiに対して実行権を付けているのに何故/usr/local/bin/perlを付ける?

>index.cgiの1行目の記述は #!/usr/bin/perlとして
>/usr/local/bin/perl /virtual/マイアカウント/mixid/index.cgi
さてPerlがあるのは
/usr/bin/perl
/usr/local/bin/perl
さてどっち?

質問者はもうcron以前の問題でいろいろ間違っているぞ。
cronの使い方以前の問題。

この回答への補足

ありがとうございます!!

>・cronで動かすスクリプトに実行権がないのはなぜ?
他の方が.shを644で設定して動いたとのことでしたので644にしました。
755や777も試したのですがエラーが出ます。
/virtual/マイアカウント/cron1.sh: cannot execute binary file


>・index.cgiを直接cronで動かさずにcron.sh経由で動かすのは何故?
CORESERVERは、cronジョブで、直接cgiを動かせないようです。
サーバーの仕様説明に
※ 「分 時 日 月 曜日」で指定した時間に「/virtual/マイアカウント/~」で指定したシェルスクリプト(/bin/sh)を実行します。とあったので、.shを置いています。
実際に直接index.cgiを指定したのですがエラーすら吐き出さず…


>/usr/bin/perl /usr/local/bin/perl さてどっち?
サーバーの仕様説明に perl : /usr/bin/perl、/usr/local/bin/perl
と、あったのでどちらでも良いのかと気にしておりませんでした。
ご指摘どおり/usr/bin/perlで揃えて試して/usr/local/bin/perlで揃えて試したのですが、エラーが出ます。

>index.cgiに対して実行権を付けているのに何故/usr/local/bin/perlを付ける?
シェルスクリプトの例で以下のように記載があったので末尾をindex.cgiに変更して記述しました。
ここがおかしいのでしょうか?

-----例------
#!/bin/sh

#PERL
/usr/local/bin/perl /virtual/マイアカウント/cron_exe.pl
exit
----例終了----

index.cgiを644に変更しましたが、エラーが出ます。
index.cgiのあるディレクトリは777です。

どれを試しても/virtual/マイアカウント/cron1.sh: cannot execute binary file
となりました。
今、cron1.shを644に直しても/virtual/マイアカウント/cron1.sh: cannot execute binary file
の状態です。

補足日時:2011/10/19 17:38
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/10/21 15:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!