cronの数学式を評価します。

cronの数学式を評価します。

曜日のパリティに応じてファイル名を指定したい。端末では、以下が機能します。$(($(date +\%u)%2))

しかし、これはcronでは機能しません(数学式の評価が機能しないようです)。

cronでどのように機能させることができますか?

答え1

他のパーセント記号ではなく、1パーセント記号をエスケープしました。

$(($(date +\%u)%2))
               ^
              HERE

みんなcrontabエントリのパーセント記号は、%が特別な意味を持つため、エスケープする必要があります。 crontab(5) マンページ引用:

行の完全なコマンド部分(改行または%文字まで)は、/ bin / shまたはcrontabファイルのSHELL変数で指定されたシェルによって実行されます。バックスラッシュ()でエスケープしない限り、コマンドのパーセント記号(%)は改行文字に変更され、最初の%以降のすべてのデータは標準入力としてコマンドに送信されます。

もちろん、この段落の表現をよりよく書いたかもしれません。

したがって、次のようにする必要があります。

$(($(date +\%u)\%2))

答え2

~からcrontab(5)

いくつかの環境変数はcron(8)デーモンによって自動的に設定されます。 SHELL は /bin/sh に設定されます。

そしてshその素晴らしい数学については何も知りません。これは2つの可能な解決策を提案する。まず、またはcronファイルを単純に保つためにSHELL別のシェルを設定し、必要な日付数学ビジネスロジックを含むスクリプトを呼び出します。SHELL=/bin/bash%また非常に特別です)crontab(5)

答え3

2つのcronエントリを作成します。

1つはパリティが0の日(crontabの「曜日」フィールドを使用)で実行され、0という名前のファイルに書き込みます。もう 1 つは 1 つのパリティがある日に実行され、1 つのパリティ名を別のファイルに書き込みます。

関連情報