0

毎朝10:00に、crontabはbashスクリプトでこのコマンドを実行するように設定されています(以下の日付は例であり、スクリプトでlinux dateコマンドを使用して計算されます)。

hg log -R some-repo -b some-branch --date "2012-11-28 10:00 to 2012-11-29 10:00"

上記のコマンドは、すべての開発者がコードをプッシュするリモートリポジトリを備えたサーバーで実行されます。出力は文字列に保存され、電子メールで送信されます。しかし、それは常に空です!数分後にスクリプトを手動で実行すると、期待どおりの出力が得られます。

スクリプトがcrontabによって実行される前の履歴を比較し、何かが実際にリモートリポジトリにコミット/プッシュされていることを確認しました。

上記のスクリプトを10:00以降に実行すると、10:00に実行した場合ではなく、正しい出力が得られる理由はありますか?

スクリプトでは、これを行います。

logString=$(hg log -R "$path-to-repo" -b $branch --date "$YESTERDAY to $TODAY")
if [ -z "$logString" ]; then
   logString="Nothing"
fi

編集:スクリプトがcrontabによって実行される場合にのみ、hgログは空になります。

解決済み:cronが表示するには、hg(/ usr / local / bin / hg)へのフルパスを指定する必要がありました。svnへのフルパスを必要とせず、hgへのフルパスがなくても以前は正常に機能していたため、少し奇妙です。

cronがPATHに何を持っているかを確認するにはどうすればよいですか?

4

1 に答える 1

0

crontab非常に限られた環境です。特定の変数が .profile (または同等のもの) から利用可能になると想定している場合、おそらくそこにはありません。必要な場合は、スクリプトにソースする必要があります。

また、長いスクリプトのスニペットが含まれているようです。動作する最も単純なスクリプトを作成し、それを cron に追加します。これにより、デバッグが容易になります。たとえば、スクリプトで日付をハードコードすると、スクリプトを機能させることができるはずです。それが機能したら、何が機能していないかを理解するまで、徐々に複雑さを追加できます。

于 2012-11-29T22:05:16.093 に答える