1

スクリプトは手動で実行するとうまく機能しますが、cronjobでスケジュールすると、次のように表示されます。

malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at /usr/local/lib/perl5/site_perl/5.14.2/JSON.pm line 171.

スクリプト自体:

#rest config vaiables


$ENV{'PERL_LWP_SSL_VERIFY_NONE'} = 0;
print "test\n";
my $client = REST::Client->new();
$client->addHeader('Authorization', 'Basic YWRtaW46cmFyaXRhbg==');
$client->addHeader('content_type', 'application/json');
$client->addHeader('accept', 'application/json');
$client->setHost('http://10.10.10.10');
$client->setTimeout(1000);

$useragent = $client->getUseragent();

print "test\n";

#Getting racks by pod
                 $req = '/api/v2/racks?name_like=2t';
               #print " rekvest {$req}\n";
               $client->request('GET', qq($req));
               $racks = from_json($client->responseContent());
               $datadump = Dumper (from_json($client->responseContent()));

crontab -l

*/2 * * * *  /usr/local/bin/perl /folder/api/2t.pl > /dmitry/api/damnitout 2>&1

提案に感謝しますありがとう、ドミトリー

4

1 に答える 1

2

実際に何が起こっているのかを言うのは難しいですが、私の経験では、99%の問題はcrontab、環境変数の違いに起因しています。

これをデバッグする一般的な方法:スクリプトの最初に次のようなブロックを追加します。

foreach my $key (keys %ENV) {
    print "$key = $ENV{$key}\n";
}

コンソールで実行し、出力を確認して、ログファイルに保存します。

ここで、crontabで同じことを繰り返し、ログファイルに保存します(すでに行っています-これは良いことです)。

双方向で実行して修正しようとすると、環境変数に違いがあるかどうかを確認してください。Perlでは、おそらく最も簡単なのは、%ENVを変更して環境を変更することです。すべての違いが整理された後、これが正しく機能しない理由はありません。

幸運を!

于 2012-12-23T00:44:09.407 に答える