2016-08-10 13 views
1

cronjob内のlinux 'date'コマンドを使用する際に問題があります。cronjobのlinux dateコマンドを使用してください

のLinux版:CentOSのLinuxの7(コア)

私は必要なものは、私のtest.shスクリプトにパラメータとして9日前の日付です。 今日は、実行する必要のあるジョブがあり、2016年10月8日である:

/scripts/test.sh 2016-08-01 

crontabの中に私のコード:

DATEVAR=$(date +%F --date="9 days ago") 
0 12 * * tue ~/scripts/test.sh $($DATEVAR) 

だから、Linuxのコマンドは、「日付+%F --dateです= "9 days ago" 'しかし、これを実行してパラメータとして設定する必要があります。 それが今、パラメータ「$(日付」としてスクリプトを実行されないもの:

~/scripts/test.sh $(date 

私は大成功せず、次のものでDATEVARを設定しようとしている:この場合

DATEVAR='date +%F --date="9 days ago"' 
DATEVAR=date +%F --date="9 days ago" 
DATEVAR=$(date +%F --date="9 days ago") 
DATEVAR=(shell date +%F --date="9 days ago") 

誰もが知っています可能であると私DATEVARを「日付」コマンドを実行した結果を設定することができますか?

+0

正式な回答を提供するのに十分な情報がありません。あなたはどのLinuxの味を使っていますか?いくつかの(Ubuntu?)は、 '/ bin/sh'としてbashを使いませんし、' $(..) '表記をサポートしないシェルもあります。代わりにバッククォートを試してみてください。パーセント文字をエスケープすることも試してください。また、 '$($ DATEVAR)'は 'date'コマンドの出力をコメントそのもののように実行するので、(あなたのcrontabでは)おそらく間違っています。 – ghoti

+0

可能な複製http://stackoverflow.com/questions/27123367/percent-sign-not-working-in-crontab – tripleee

答えて

0

これは動作するはずです:

0 12 * * tue _DV=`date +\%F --date="9 days ago"`; ~/scripts/test.sh $_DV 

は残念ながら、ここに克服するには、いくつかの問題があります。まず、cronが "環境設定"をサポートしているという事実は、誤解を招く可能性があります。シェルスクリプトの経験を持つ人は、シェルの完全な力をここで使うことができると容易に想像するかもしれません。これらの設定は、彼らが来るほど愚かであり、厳格な置き換えである。私の考えでは、より良いモニカは「プレースホルダ割り当て」です。

第2に、利用したい日付文字列はやや複雑です。具体的には、引用符付きの文字列( "9日前")と特別なcrontab文字(驚き!)が含まれています。 '%'は式 '+%F'にあります。 Cronは '%'を改行で置き換えます。これは素晴らしい機能ですが、気づかない人や忘れてしまっても驚くべきことです。また、引用符は割り当てフェーズでは存続しません。これを知っ

、「プレースホルダの割り当て」を使用して上記のエントリの代わりに、次のとおりです。ここでは、私たちが直接、任意の補間なしで置換することにしたい部分を

DT1 = date +%F 
DT2 = 9 days ago 

0 12 * * tue _DV=`$DT1 --date="$DT2"`; ~/scripts/test.sh $_DV 

キャプチャします。

1つの価格で2つのソリューションがあります!

+0

これは機能します!ありがとうございました:) –

0

私はあなたがcronジョブの内部でそれを行うことができますかわからない。

単純な回避策は、test.shへの呼び出しを引数なしで別のスクリプトにラップすることです。それで、簡単に書いてください:

DATEVAR=$(date +%F --date="9 days ago") 
~/scripts/test.sh $($DATEVAR) 

これはあなたのcronjobで呼び出すことができます。

+0

入力いただきありがとうございます!私はこれが最も簡単な解決策であり、最良の解決策になると思う。 –

関連する問題