如何在 Cron 上动态设置变量?
How dynamically set variables on Cron?
我正在尝试制作一个 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 table 不是 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 身份运行程序。)
我正在尝试制作一个 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 table 不是 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 身份运行程序。)