web-dev-qa-db-ja.com

crontab出力のログで使用するDATE変数をどのように設定しますか?

私は次のような日付のいくつかのバリエーションで遊んでいました

DATE = $(date)

それでもうまくいきませんでした

crontab -e

CRONLOG=/tmp/log/crontab.log
DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
* * * * * echo $DATEVAR >> /tmp/log/crontab.log
*/2 * * * * echo "$DATEVAR hello" >> ${CRONLOG}
*/1 * * * * echo 'every minute' >> ${CRONLOG}

これはテキストをそのまま出力します...

各更新のタイムスタンプを含むログエントリをcrontab.logに作成したい

CentOS 6でこれを行うにはどうすればよいですか?

[〜#〜]更新[〜#〜]

DATEVAR=date +20%y%m%d_%H%M%S
*/1 * * * * /bin/echo [CRON] $($(DATEVAR)) >> /tmp/log/crontab.log

[CRON]のみをレンダリングし、試したときに何もしない= /

10
qodeninja

Cronはシェルではありません-シェルと同じようにコマンドを解析しません。したがって、変数は静的テキストであるかのように割り当てられます。

この問題に対して私が知っている3つの解決策があります。

オプション1:シェルスクリプトを使用してコマンドを生成し、必要な変数とロジックを含めて、そのシェルスクリプトをcronから呼び出します。

* * * * * /path/to/myscript.sh

myscript.sh:

DATEVAR=`date +20\%y\%m\%d_\%H\%M\%S`
echo $DATEVAR >> /tmp/crontab.log

オプション2:コマンドに直接dateコマンドを含めます。コマンド全体がシェルに渡されるため、日付が処理され、実際の日付に置き換えられます。

* * * * * /bin/echo `date +20\%y\%m\%d_\%H\%M\%S` >> /tmp/crontab.log

オプション3:文字列変数をcronで設定し、コマンドに渡して処理します(注-パーセント記号はエスケープする必要がなく、変数自体を$()でラップして別のシェルで実行します-バックティックは同じように動作するはずです):

DATEVAR=date +20%y%m%d_%H%M%S
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log

(上記のすべてのケースで、もちろん、「ハードコーディング」する代わりに、ログパスの変数を使用できます。)

28
cyberx86