今日が次のように毎月最初の月曜日であることを確認する方法があります。
['$(date "+%u")' = "1"] && echo 'trąba'
しかし、crontabで問題が発生したというEメールを送信するとエラーが発生します。
/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file
私は変更しようとしています'$(日付 "+%u")'「$(date '+%u')」に変更しましたが、役に立ちません。電子メールの件名は["$(date '+]なので、最初の引用符に問題があるようですが、このコードは端末内で実行するとうまく機能します。多分誰かが一週間を確認するのに良い"確認"があるかもしれません。月
オペレーティングシステム:CeontOS 7
コントロール-l
* * * * * [ "$(date +%u)" -eq 1 ] && echo trąba
答え1
固定POSIXコードは次のとおりです。
[ "$(date +%u)" -eq 1 ] && echo trąba
エラー/警告/情報は次のとおりです。
[
..]
ブロックにスペースがありません。二重引用符の代わりにアポストロフィ
-eq
テストでは、POSIXの代わりに等号を使用してください[
。]
それ以降は何も引用する必要はありません。
echo
数字を引用する必要はありません。
date
コードを引用する必要はありません。
クローナ
*/1 * * * * [ "$(/usr/bin/date +\%u)" -eq 1 ] && /usr/bin/echo trąba >> ~/cron-test
これをテストするには、上記のコードを試してみてください。
システムの他の場所に
date
バイナリを置き、そのecho
場所、目的which date
などを決定できます。Cronを修正した後は、単に使用して静かに座ることができます。
tail -f ~/cron-test
答え2
crontabエントリのコマンド部分では、エスケープされない限り、コマンドを%
実行する前に改行文字に変換されます。したがって、日付書式文字列からその項目をエスケープする必要があります。
[ ]
その他の問題: とその中の内容の間にスペースが必要で、$( )
単一引用符内では拡張されません。これは修正版です:
[ "$(date "+\%u")" = "1" ] && echo 'trąba'