如何在Cron上动态设置变量?

时间:2017-03-16 19:46:26

标签: php shell cron crontab cron-task

我试图将一个cron文件放在/ etc / croon中。 d。我的问题是我不想让这个文件更新,所以我正在寻找一种从文件中动态获取软件版本的方法。 我几乎没有其他变量,但是现在我认为问题出在$ (cat /software/VERSION)上,它在shell脚本中运行得很好,但在croon上却没有。

#!/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 log上的输出:

(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 个答案:

答案 0 :(得分: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身份运行程序。)