2017-03-16 26 views
1

私は/ etc/croonに置かれるcronファイルを作ろうとしています。 d。私の問題は、私はこのファイルを更新しないようにしたいので、ファイルからソフトウェアバージョンを動的に取得する方法を探しています。 私は他の変数はほとんどありませんが、問題は$ (cat /software/VERSION)だと思っています。シェルスクリプトではうまく動作しますが、croonではうまく動作しません。Cronで動的に変数を設定する方法は?

#!/bin/bash 
SHELL=/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 
APPLICATION_ENVIRONMENT=SOME_STRING 
VERSION=$(cat /software/VERSION) 
HOME=/var/www/scripts/$VERSION/cron 
CRON_LOG_DIR=/var/www/scripts/logs 

*/2 * * * * root cd $HOME & php -f $HOME/do_something.php $APPLICATION_ENVIRONMENT >> $CRON_LOG/something.log 

これはcronのログに出力されます:

(root) CMD (cd $HOME & php -f $HOME/do_something.php $APPLICATION_ENVIRONMENT >> $CRON_LOG/something.log) 
(CRON) ERROR chdir failed (/srv/www/tdp/public/$VERSION/backend/cron): No such file or directory 
+1

cronはシェル(またはPHP)スクリプトを呼び出すことができます。プログラムを置く場所ではない – nogad

答えて

2

クロンテーブルシェルスクリプトではありません!そこに変数を置くことはできません。

あなたはcronからスクリプトを呼び出してそこでロジックを実行する必要があります。私は私が作った100%を確認していない(あなたが本当にのcronで環境変数を設定するを持っている場合は

は、あなたがこの

*/2 * * * * root SHELL=/bin/bash VARIABLE=something cd $HOME & php -f $HOME/do_something.php $APPLICATION_ENVIRONMENT >> $CRON_LOG/something.log 

のようにそれを行うことができますしかし、それは動作しない可能性がありますし、あなたがミスを犯す可能性があります構文の権利;それは簡単ではなく、必要ではありません)。

可能な限りcronにはほとんどロジックを付けないでください。

また、cronファイルを直接編集しないでください。代わりにcrontab -eを使用すると、正しい構文が使用されているかどうかが確認されます。

だから、

*/2 * * * * user /home/user/your-script.sh 

を行うと、スクリプトで変数を設定する必要があります。 (可能であれば、プログラムをrootとして実行しないでください)

+0

ありがとう! しかし、crontab -eを使って/etc/cron.d/myfileを編集するにはどうすればよいですか? – LeonanCarvalho

関連する問題