2017-03-16 27 views
1

我试图让一个cron文件放在/ etc/croon中。 d。我的问题是我不想让这个文件更新,所以我正在寻找一种方法来从文件中动态获取软件版本。 我有其他几个变数,但现在我认为问题是$ (cat /software/VERSION),它在shell脚本中运行得非常好,但是在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可以调用shell(或php)脚本。它不是放置节目的地方 – nogad

回答

2

cron表是一个shell脚本!你不能把变量放在那里。

你必须从cron调用一个脚本并在那里执行逻辑。

如果你真的设置环境变量在cron,你可以做这样的

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

但它可能无法正常工作,你可能犯了一个错误(我不是100%肯定,我做了语法正确;这并不容易,也没有必要)。

你应该尽可能少的逻辑cron。

此外,你不应该直接编辑cron文件;改为使用crontab -e,它会检查您是否制作了正确的语法。

所以,你应该做的

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

,并设置变量在脚本。 (如果可能,您也不应该以root身份运行程序。)

+0

谢谢! 但是我怎样才能用crontab -e编辑/etc/cron.d/myfile? – LeonanCarvalho