2

Subversionリポジトリへの変更を表示する次のコマンドがあります

svn log -v -r{$(date +%Y-%m-%d)}:HEAD http://therepository | awk '/^r[0-9]+ / {user=$3} {if (user=="username") {print $1 $2 $3}}' | mail -ne -s'Users SVN commits' email@email.com

コマンドラインで正常に動作します。

crontabに貼り付けると、次のエラーメッセージが表示されます。

/bin/sh: -c: line 0: unexpected EOF while looking for matching `)'
/bin/sh: -c: line 1: syntax error: unexpected end of file

これを機能させるには、どのように引用する必要がありますか?

4

2 に答える 2

6

cronを使用する場合は、すべてをシェルスクリプトに入れて、このような問題の煩わしさを回避してから、cronからシェルスクリプトを呼び出します。

このアプローチは一般的に使用されており、次の理由からお勧めします。

  • コマンドを簡単にテストできるようになります(1分以内に実行をスケジュールするなどの愚かなことをする必要はありません)
  • 必要に応じて手動で簡単に呼び出すことができます。たとえば、ジョブが失敗した場合、crontabに触れることなくopsを再実行できます。また、他のジョブからジョブを呼び出すこともできます。たとえば、すべてのジョブが正常に実行されたかどうかを確認してそれらを再実行する最終ジョブです。それはしませんでした
  • 実行されたものと実行されたものを分離します-cronに(のみ)それが最も得意とすることを実行させます:スケジューリング
  • シェルスクリプト機能へのフルアクセス、またはperlなどのさまざまなシェルの使用を提供します
  • crontabをクリーンで読みやすくします
  • cronタスクを開発/保守している人なら誰でも、cronタスクに一貫性のあるディレクトリ(例:/ opt / cronなど)を使用する場合にどこを見ればよいかを知っています。
  • cronタスクをソース管理下に置くことができます-シェルスクリプトがソース管理で見落とされることがよくありますが、それらはコードであるため、ソース管理の恩恵を受けます

例えば:

dosomething.sh:

svn log -v -r{$(date +%Y-%m-%d)}:HEAD http://therepository | awk '/^r[0-9]+ / {user=$3} {if (user=="username") {print $1 $2 $3}}' | mail -ne -s'Users SVN commits' email@email.com

プラス

cron 0 22 * * * /opt/cron/dosomething.sh
于 2011-08-14T21:05:28.703 に答える
1

最も簡単な方法は、それをbashスクリプトとして保存し、cronからスクリプトを実行することです。

(私はこれを答えではなくコメントにしたでしょうが、SOは私にコメントさせません)

ジョー

于 2011-08-14T21:07:30.857 に答える