【问题标题】:shell script won't change directory and execute python scriptshell脚本不会更改目录并执行python脚本
【发布时间】:2020-03-03 19:15:09
【问题描述】:

所以我有一个文件success.sh

 python3 /home/ubuntu/foo.py

这在 Cron 中运行:

* * * * * /home/ubuntu/success.sh >> /tmp/cron_output

foo.py 是简单的

 print("DSVSDVDSVSDFDS")

但是,一旦我尝试运行我真正想要运行的内容并将 success.sh 更改为以下内容:

   cd "/home/ubuntu/Amazon to Ebay v1.7/Catalogue 2/" && python3 "/home/ubuntu/Amazon to Ebay v1.7/Catalogue 2/ebay-price-arbitrage-bot.py"

文件中没有记录输出...

我想知道它是否正在运行。为什么什么都没有输出?? success.sh 作为独立的运行良好...

编辑:

我已将我的 crontab 更改为以下内容:

  * * * * * /home/ubuntu/success.sh > /tmp/cron_output 2>&1

所以它输出错误。现在它显示在我的 py 脚本中找不到模块。

    Traceback (most recent call last):
    File "/home/ubuntu/Amazon to Ebay v1.7/Catalogue 2/ebay-price-    arbitrage-bot.py", line 23, in <module>
    from paypal import PayPalInterface
    ModuleNotFoundError: No module named 'paypal'

但它作为一个独立的工作正常,所以我不知道发生了什么。

【问题讨论】:

  • 它只使用绝对路径,如上代码所示。
  • 你的权利,这是一个错字。现在更正。
  • 请贴出错误的全文。
  • @stark 完成。 //
  • 当使用import时,python在sys.path中寻找模块(import syssys.path)。如果您可以在一个环境(例如,命令行)中找到该模块,而在另一个环境(例如,cron 作业)中找不到它,那么 sys.path 在这两个环境中可能会有所不同。另请参阅PYTHONPATH 环境变量。 Cron 作业通常具有非常小的环境(printenv 和手册页会有所帮助)。

标签: python ubuntu chron


【解决方案1】:

既然你提到了python文件的完整路径,你不需要对那个路径做cd。

另外,你能检查一下路径是否正确吗?因为,&& 运算符的工作原理是仅当 cd 命令成功时才执行 python3 命令。因此,如果路径不正确,cd 将失败,python3 将永远不会执行。

或者,您可以使用 ';'而不是 '&&' 保证 python3 的执行,无论 'cd' 命令的结果如何。

【讨论】:

  • 我已经按照你的建议尝试并摆脱了 cd .....我还为我的 crontab 中的任何错误添加了重定向......现在输出显示模块不是在我的 py 脚本中导入。但它作为一个独立的运行良好!
  • 你能尝试提供python3可执行文件的绝对路径吗?
  • 看起来 CRON 环境找不到 python3 可执行文件。
【解决方案2】:

Python 在当前目录和标准模块路径中查找模块。当您从 cron 运行时,该进程不在您的主目录中,因此需要添加路径。在 python 文件中:

import sys
sys.path.insert(0, "/path/to/your/paypal/module")

【讨论】: