2017-10-28 15 views
1

私は非常に長く(そして、面倒な)crontabを持っています。だから私は変数を導入することでそれを掃除し始めました。そして、私は変数を連結すること(私はBashスクリプトのように)は私のcrontabで動作しないことに気付きました。これは私が持っているものです。crontabで変数を連結しても機能しません

SHELL=/bin/bash 
HOME=/Users/leuchtturm 
# [1] Previously had this, but this does not seem to work 
# $HOME is not being evaluated? Why? 
# 
# VIRTUALENV_PYTHON=$HOME/.virtualenvs/py361/bin/python 
# Now I have this (elaborated) 
VIRTUALENV_PYTHON=/Users/leuchtturm/.virtualenvs/py361/bin/python 

# the crontab entry 
# Here $HOME is being expanded, but not in the example above [1] 
# 
*/2 * * * * source $HOME/.config_vars && $VIRTUALENV_PYTHON $HOME/workspace/monitoring/check_server.py 

だから、この行に VIRTUALENV_PYTHON=$HOME/.virtualenvs/py361/bin/python変数$HOMEが評価されていません。私のcronログに "path not found"というエントリがあります。

誰かが私を啓発できますか?ありがとう!

答えて

2

のcrontab 内のファイル、VAR=valueような行は定義がのcronによって認識され、シェル下で実行されていません。したがって、変数定義の値は決して拡張されません。一方

crontabエントリコマンドは、あなたのケースでは、SHELL変数で定義されたシェルによって、デフォルトのcrontabシェルで実行されるかされます。

は、その特定ののcronのバージョンを使用して、任意の変数を定義できないかもしれませんが、その他SHELLHOMEMAILTO、のような、特定のものはVariables in crontab?を参照してくださいにも注意してください。

+0

私のアプローチは基本的に間違っていますか?私は、詳細とパス設定をbashスクリプトに入れて、crontabなどのパスを設定するのではなく、そのスクリプトをcronjobから呼び出す必要がありますか?もしそうなら、そのスクリプトはどこにあるべきですか?私のPythonプロジェクトフォルダには? – Ugur

+0

特定の* cron *のバージョンでは、変数を定義することはできませんが、ほとんどのことが考えられます。 * crontab *エントリをより明確にするために変数を定義するアプローチを使用してください。他のものを定義するために変数を使用しないでください。 –

+1

また、価値があるかもしれないが、私は通常、* crontab *からプログラムを呼び出すa * bash *(シェル)スクリプトを定義します。スクリプトの頭では、私が必要とする変数を定義し、プログラム(あなたの場合はPython)を呼び出します。それはあなたにファイルを準備し、それらをきれいにするなどの場所を与えます。 –

関連する問題