Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
寻源外部bash脚本时crontab不工作_Bash_Cron - Fatal编程技术网

寻源外部bash脚本时crontab不工作

寻源外部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

我有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/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
的完整路径名。