カール付きのスクリプトは手動で実行できますが、クローンジョブでは実行できません。

カール付きのスクリプトは手動で実行できますが、クローンジョブでは実行できません。

私のスクリプト(status.sh)は次のとおりです。

#!/bin/bash
SITE=http://www.example.org/

STATUS=$(/usr/bin/curl -s -o /dev/null -I -w "%{http_code}" $SITE)

if [ $STATUS -eq 200 ]
then
 echo $STATUS >> /home/myuser/mysite-up.log
else
 echo $STATUS >> /home/myuser/mysite-down.log
fi

私は走る:

$ chmod +x /home/myuser/status.sh

それから私のcrontabから次のようになります:

* * * * * /home/myuser/status.sh

私が実行したとき:

$ /home/myuser/status.sh

このファイル/home/myuser/mysite-up.logには以下が含まれます。

200

ただし、cronが実行されると、ファイルには次のものが/home/myuser/mysite-up.log含まれます。

000

私は何が間違っていましたか?

編集する: 以下を追加するスクリプトを修正しました。

set -x

@Sobriqueが提案したように、私の結果は次のとおりです。

 SITE=http://www.example.org/
 /usr/bin/curl -s -o /dev/null -I -w '%{http_code}' http://www.example.org/
 STATUS=000
 '[' 000 -eq 200 ']'
 echo 000

ベストアンサー1

コマンドラインからスクリプトを実行することとcronで実行することの主な違いは環境です。他の動作が発生した場合は、その動作が環境変数が原因であるかどうかを確認してください。クローン操作は、いくつかの変数が設定されている場合にのみ実行され、これらの変数はログインセッションの値と必ずしも同じではありません(特にPATH異なる場合が多い)。

環境変数を設定するには、で宣言するか~/.pam_environment(システムがサポートしている場合)、. ~/.profile &&cronジョブの先頭に追加します(で宣言する場合.profile)。また、見ることができます環境変数を設定するための最良の distro/shell 独立した方法は何ですか?

この場合、000カールの状態はサーバーに接続できないことを示します。通常、ネットワーク接続はシステム全体にわたって行われるため、cronのネットワーキングは同じように機能します。しかし、環境変数が表す1つのことは、プロキシを使用することです。ネットワークに接続するためにプロキシが必要で、http_proxyセッション起動スクリプトに環境変数を設定した場合、その設定はcronジョブには適用されず、これが失敗する可能性があります。

-S呼び出しにエラーメッセージを表示するオプションを追加します(他のメッセージは非表示になりますcurl)。-s

おすすめ記事