【问题标题】:How dynamically set variables on Cron?如何在 Cron 上动态设置变量?
【发布时间】:2017-08-08 04:25:29
【问题描述】:

我正在尝试将 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 日志的输出:

(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

【问题讨论】:

  • cron 可以调用 shell(或 php)脚本。它不是放置编程的地方

标签: php shell cron crontab cron-task


【解决方案1】:

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 身份运行程序。)

【讨论】:

  • 谢谢!但是如何使用 crontab -e 编辑 /etc/cron.d/myfile ?
猜你喜欢
  • 2011-10-28
  • 2013-05-15
  • 2019-08-31
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2019-01-29
相关资源
最近更新 更多