【问题标题】:Why using crontab I get "-bash: Applications: command not found"?为什么使用 crontab 我得到“-bash: Applications: command not found”?
【发布时间】:2021-06-22 14:52:55
【问题描述】:

我正在尝试使用 crontab 在 MacOS 上安排一个简单的 python 脚本。我在这里看到了很多指南和其他问题的答案,但仍然无法完成我的任务。其实我对终端和这类东西不是很熟悉,但看起来并不难,所以我希望能解决它。

我采用了两种不同的方法。

第一种方法:

  1. 我在终端上使用命令crontab -e
  2. 在 VIM 中,我按 I 键插入并粘贴以下内容:
* * * * * /usr/bin/python mypath/ap.py
  1. 按 "esc" 和 ":qw" 关闭 VIM 窗口。

  2. crontab -l 按预期显示我的 cron 条目,但脚本没有任何反应(它应该创建一个 txt 文件)。

第二种方法:

  1. 我将此行粘贴到终端中:
* * * * * /usr/bin/python mypath/ap.py >> mypath/MyCronLog.txt 2>&1
  1. 通过这种方式,我可以看到一个 txt 文件,我可以在其中读取日志和最终错误。 MyCronLog.txt 显示:-bash: Applications: command not found 或 -bash: ap.py: command not found。

我的 python 脚本位于我的桌面上的一个文件夹中(我不知道这是否重要)。

此外,我从终端运行我的 python 脚本,它运行良好。 任何建议表示赞赏!

编辑 1: 我的python脚本的路径如下: /Users/myname/Desktop/ap/ap.py

编辑 2: “/opt/anaconda3/bin/python”代替了“/usr/bin/python”,但没有任何改变。

【问题讨论】:

  • 尝试为mypath/ap.py 使用绝对路径名:/Users/yourname/mypath/ap.py
  • @Barmar 我实际上使用了绝对路径名,抱歉没有指定。
  • which python 的输出是什么?如果它们不同,请将 /usr/bin/python 替换为输出
  • 准确指定您为mypath 使用的内容。我的猜测是它包含字符串“应用程序”和一些带有空格的组件。
  • @Frisk19 你能把问题更新为正确的吗(即输入/Users/yourname/mypath),这样你就没有很多绝对答案/cmets。

标签: python bash macos cron


【解决方案1】:

问题似乎出在您的 python 脚本中。我猜 txt 文件已创建但在错误的文件夹中。当 cron 调用 python 脚本时,工作目录不是该脚本的目录(参见here)。查看here 寻找解决方法。

编辑:

您的脚本的行为可能取决于您调用它的目录(这不是编写脚本的理想方式)。当您在/Users/myname/Desktop/ap 并调用python ap.py 时,这可能会导致与从/Users/myname/Desktop 调用python ap/ap.py 不同

您可以通过调用这个简短的脚本来验证这一点:

import os

print(os.getcwd())

我可以想象你的脚本在被 cron 调用时会崩溃,而如果你从包含目录中调用它,它会起作用。

【讨论】:

  • 感谢您的解决方法。但我的意思是,如果我尝试从终端运行我的脚本,那么一切都很完美,我可以很容易地在同一个文件夹中找到我的新文件。即使在其他目录中检查该文件也不存在。
  • @Frisk19 查看我的编辑。也许你应该向我们提供你的 python 脚本的代码。
  • 我认为你的 shell 的 PATH 中有一个目录在 cron 中不可用。这将解释它从终端而不是 cron 的工作。这也与带有 脚本文件名 前缀的 command not found 错误直接相关。比较 PATH 变量。 cron 版本可能位于 crontab 文件顶部的 cmets 中。外壳一可通过echo $PATH 访问。如果您可以共享 Python 脚本也会有所帮助
  • @Durtal 是的!我用 python 脚本编辑了我的问题。所以,当我在/Users/myname/Desktop/ap 并打电话给python ap.py 时,它工作得很好。当我在/Users/myname/Desktop 并致电python ap/ap.py 时,它不再起作用。我还调用了你的脚本,这就是我得到的:/Users/myname/Desktop/ap。有用吗?
  • @Frisk19 查看我回答中的第二个链接。 path_xlsx = path_script.parent.joinpath('excel.xlsx') a.to_excel(path_xlsx) 还可以在 /Users/myname/Desktop 中查找您的 excel 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2019-07-07
  • 2020-10-31
  • 1970-01-01
  • 2023-01-12
  • 2014-07-01
  • 2018-07-18
相关资源
最近更新 更多