在我的Vixie Cron文件中执行一行时,出现以下错误:
/ bin / sh:1:cd:无法cd到$ HOME / prg / gridtrader
对我来说,这意味着$HOME
不会被扩展,即使crontab(5)表示会进行扩展,并且执行日志显示HOME
被定义。
cron文件如下所示:
GT_DIR = $HOME/prg/gridtrader
PYTHON_EXE = $HOME/install/python37/bin/python3
APPLICATION = gridtrader/gridtrader.py
ACCOUNT = metaperl_yobit
# GRID TRADER
*/5 * * * * cd $GT_DIR && $PYTHON_EXE $APPLICATION --monitor $ACCOUNT
我收到的日志消息是:
X-Cron-Env: <ST=/home/schemelab/prg/surgetrader/src>
X-Cron-Env: <INVOKE=/home/schemelab/install/miniconda3/bin/invoke>
X-Cron-Env: <I=iniset_1>
X-Cron-Env: <AGT=~/prg/adsactly-gridtrader>
X-Cron-Env: <GT_DIR=$HOME/prg/gridtrader>
X-Cron-Env: <PYTHON_EXE=$HOME/install/python37/bin/python3>
X-Cron-Env: <APPLICATION=gridtrader/gridtrader.py>
X-Cron-Env: <ACCOUNT=metaperl_yobit>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/schemelab>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=schemelab>
Date: Tue, 26 Feb 2019 11:25:01 -0500 (EST)
/bin/sh: 1: cd: can't cd to $HOME/prg/gridtrader
从外壳上可以看到,执行此cd
命令没有问题:
schemelab@metta:~$ ls /home/schemelab/prg/gridtrader
LICENSE SPEC.md accounts doc log requirements.txt system.ini tmp venv
README.md StatusReport.docx batch gridtrader persistence src system.ini.sample tradelog.docx
schemelab@metta:~$ cd /home/schemelab/prg/gridtrader
schemelab@metta:~/prg/gridtrader$ ls -ld ~/prg/gridtrader
drwxr-xr-x 13 schemelab schemelab 4096 Feb 18 13:56 /home/schemelab/prg/gridtrader
schemelab@metta:~/prg/gridtrader$
答案 0 :(得分:2)
您遇到了cron最常见的问题之一,试图像任意shell脚本一样使用它。 Cron is not a shell script,您将无法完成所有工作,例如取消引用变量或设置任意新变量。
我建议您将值替换为cron行,并避免使用变量:
# GRID TRADER
*/5 * * * * cd $HOME/prg/gridtrader && $HOME/install/python37/bin/python3 gridtrader/gridtrader.py --monitor metaperl_yobit
答案 1 :(得分:0)
解决cron变量内容未扩展的另一种方法是eval
:
*/5 * * * * eval cd $GT_DIR && eval $PYTHON_EXE $APPLICATION --monitor $ACCOUNT