【问题标题】:crontab not working when sourcing external bash script采购外部 bash 脚本时 crontab 不工作
【发布时间】:2018-06-24 12:24:46
【问题描述】:

我有 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_PATH 没有传递给工作脚本?

【问题讨论】:

  • 看起来你的 config.sh 没有得到来源,在你的错误输出中,shell 说它没有找到 /home/user/config.sh。尝试修复它,它应该可以工作。
  • 不幸的是,我不能将 config.sh 放在其他脚本目录中,它应该与所有其他应用程序目录一起存在
  • 你有办法知道确定config.h在哪里吗?如果你这样做了,那么从那里获取它,例如,如果它总是在 /home/user 中,那么不要执行 $PWD/config.sh,将其更改为 /home/user/config.sh。或者,也许您获得了路径的某些部分,例如“用户”,然后您从中构造配置文件路径,例如,. "/home/$username/config.sh" 或类似的。
  • 我尝试做一些动态的东西
  • 不要相信 $PWD。相反,请参阅保证由 cron 设置的 ${HOME}。

标签: bash cron


【解决方案1】:

您假设cron在特定目录中执行脚本的问题。它实际执行的目录可能不是您想要的目录。

在上面的示例中,脚本在/home/user 中执行。正如 Leo 所说,如果 config.sh 在该目录中,它应该可以工作。

【讨论】:

  • 不幸的是我不能,这是 config.sh 在某些全局脚本目录中的所有问题
  • 那么,你为什么使用$PWD?几乎可以肯定这个全局脚本目录不是$PWD。所以不要使用$PWD,而是使用config.sh的完整路径名。
猜你喜欢
  • 2017-10-27
  • 2015-07-14
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 2023-03-04
  • 2013-04-19
相关资源
最近更新 更多