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


10

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

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]のみをレンダリングし、試したときに何もしない= /

回答:


28

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

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


1
素晴らしいフィードバックをありがとう+1、私はそれをcrontabに追加しようとしましたが、それがうまくいきませんでした= / DATEVARをレンダリングしませんでした
qodeninja

私はRHEL / CentOS6互換システムでこれを実行しただけで、期待した結果が得られました(つまり、日付を含むファイルに新しい行が追加されました)。(上記の3つのうち)どのオプションを試してみましたか。具体的にはどのような結果でしたか。/var/log/cronにエラーがありましたか?(スクリプトオプションを使用する場合、a)chmod + xを忘れないでください。b)最初に自分で試してください(つまり、cronを使用しないでください))
cyberx86

1
オプション3 =]、私は以前にそれをやろうとしましたが、レンダリングされませんでした。しかし、今あなたが気付いたのは、ちょっとしたことをしたことです。なぜ$($(DATE))を倍増したのですか?上記の私の更新を参照してください
qodeninja

1
追加したアップデートにタイプミスがあります-そうではあり$($DATEVAR)ません$($(DATEVAR))。このように考えてください。$()つまり、外側のブラケットは、ブラケット内にあるものを処理するために新しいシェルを起動します。この場合、変数$ DATEVARは文字列に設定され、シェルに渡されます。$(DATEVAR)何もない-何もないためDATEVAR(つまり、変数として識別するための$が欠落しているため)また、バッククォートを使用し$DATEVARて同じ結果を得ることができます
cyberx86

けっこうだ。更新しました。この悪い男の子を試してみましょう!-ハザー!それは
笑った
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.