寻源外部bash脚本时crontab不工作
我有crontab,我需要它在这个bash脚本中提供全局bash 我导出在其他脚本中使用的全局EVN变量 问题是,当我从crontab脚本调用脚本时,它会忽略 导出全局EVN变量 这是config.sh,它的路径是:寻源外部bash脚本时crontab不工作,bash,cron,Bash,Cron,我有crontab,我需要它在这个bash脚本中提供全局bash 我导出在其他脚本中使用的全局EVN变量 问题是,当我从crontab脚本调用脚本时,它会忽略 导出全局EVN变量 这是config.sh,它的路径是:/home/user/scripts,我无法将它移动到其他目录 #!/bin/bash PATH=$PATH:/home/user/.local/bin:/home/user/bin:$PWD #Tests path export MAIN_PATH=/home/user/setup
/home/user/scripts
,我无法将它移动到其他目录
#!/bin/bash
PATH=$PATH:/home/user/.local/bin:/home/user/bin:$PWD
#Tests path
export MAIN_PATH=/home/user/setup/work
还有crontab脚本
#!/bin/bash
PATH=$PATH:/home/user/.local/bin:/home/user/bin:$PWD
source $PWD/config.sh
#remove previous crontab
crontab -r
#set crontab
(echo "27 11 * * * $MAIN_PATH/run-from-crontab.sh") | crontab -
#print loaded crontab
sudo crontab -u user -l
在run-from-crontab.sh中
#!/bin/bash
PATH=$PATH:/home/user/.local/bin:/home/user/bin:$PWD
source $PWD/config.sh
$MAIN_PATH/scripts/test.sh
此时,我希望MAIN_PATH将保存导出MAIN_PATH值
但我得到了:
/home/user/setup/work/scripts/run-from-crontab.sh: line 3: /home/user/config.sh:
No such file or directory
chmod: cannot access ‘//scripts’: No such file or directory
为什么
MAIN\u PATH
没有传递到工作脚本?问题在于,您假设cron在特定目录中执行脚本。它实际执行的目录可能不是您想要的目录
在上面的示例中,脚本在
/home/user
中执行。正如Leo所说,如果config.sh
在该目录中,它应该可以工作。看起来你的config.sh没有获得源代码,在你的错误输出中,shell说它没有找到/home/user/config.sh。尝试修复它,它应该会工作。不幸的是,我无法确定config.sh在其他脚本目录中,它应该与所有其他应用程序目录一起存在。您有办法确定config.h将在哪里吗?如果您这样做,则从那里获取它,例如,如果它始终位于/home/user中,则不要执行$PWD/config.sh,将其更改为/home/user/config.sh。或者,您可能得到了路径的某些部分,比如“user”,然后您就可以从中构造配置文件路径,例如,。“/home/$username/config.sh”
或类似内容。我尝试制作一些动态的东西,但不信任$PWD。相反,请参考${HOME},它保证由cron设置。不幸的是,我不能,这就是config.sh在某些全局脚本目录中的全部问题。那么,为什么要使用$PWD
?几乎可以肯定,这个全局脚本目录不是$PWD
。因此,不要使用$PWD
,而是使用config.sh
的完整路径名。