【问题标题】:Running script with cron doesn't work on mac使用 cron 运行脚本在 mac 上不起作用
【发布时间】:2023-04-02 17:05:01
【问题描述】:

我一直在尝试运行每分钟执行一个 python 脚本的 cron 作业。 执行“which python”后,我将 cron 作业设置如下:

SHELL=/bin/bash
MAILTO=MyMac

PATH=bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

*/1 * * * * * /Users/MyMac/anaconda3/bin/python
/Users/MyMac/desktop/cron_test/test.py

职位描述在一行中,定义末尾有一个换行符。

我在/var/mail/MyMac 中收到以下错误:

/bin/bash: AnacondaProjects: command not found

所以我删除了:

SHELL=/bin/bash

我得到了:

/bin/sh: MyMac: command not found

然后我尝试了 /usr/bin/python 的所有可能组合,无论是否指定 lib、anaconda 等,无论是否指定 PATH、SHELL、MAIL。不幸的是,没有成功。

我做错了什么?

编辑

以下是我根据收到的建议所做的总结:

我试过了:

* * * * * env > /tmp/env.output, 

首先我得到一个错误:

/bin/bash: /tmp/env.output: Permission denied, 

所以我做了一个 cron Job 作为 sudo。 env.output 中的路径是:

PATH= bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/Users/MyMac/AnacondaProjects

最后我将我的 cronjob(作为普通用户而不是 sudo)设置为:

SHELL=/bin/bash
MAILTO=my_address@mail.com
PATH=bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/Users/MyMac/AnacondaProjects:/Users/MyMac/anaconda3/bin/python:/usr/bin/env

 * * * * * /Users/MyMac/anaconda3/bin/python /Users/MyMac/desktop/cron_test/test.py

还是不行。 python代码为:

#!/usr/bin/env python
def main():
    f = open("test.txt", "w+")
    f.write("HELLO" + '\n')
    f.close()


if __name__ == "__main__":
    print("Print")
    main()

我期待着获得并尝试新的方法。

【问题讨论】:

  • 看起来您的脚本在指定的路径中找不到AnacondaProjects(cron 不会接管您用户的路径)。
  • 我将 /Users/MyMac/AnacondaProjects 添加到 PATH,但它不起作用。
  • /Users/MyMac/desktop/cron_test/test.py 真的在单独一行吗?另外,这是由于 python 脚本中的某些东西造成的吗?如果将脚本替换为仅打印“正在运行”或类似内容的脚本会怎样?
  • 我前段时间遇到过类似的问题,请查看this answerhth!
  • 是的,它在单独的行上。我在描述中强调了这一事实,因为我知道它看起来好像不是。 Python 脚本本身可以完美运行,即当我在终端“python test.py”中运行它时,我得到了我想要的结果。

标签: python macos cron


【解决方案1】:

尝试这样做:

  1. 打开偏好设置并转到“安全和隐私”->“隐私”
  2. 向下滚动到左侧的“全盘访问”并选择它。
  3. 点击解锁图标并输入您的密码
  4. 点击“+”号添加应用程序
  5. 键入“command+shift+G”以调出获取文件对话框(似乎无法导航 /usr 目录)
  6. 输入应用程序的完整路径名(/usr/sbin/cron)并点击“Go”
  7. 点击“打开” 它应该显示在列表中,旁边有一个复选标记。 我在 cron 中使用一个简单的 csh 脚本进行了尝试,并且成功了。 (感谢我的消息来源:https://blog.bejarano.io/fixing-cron-jobs-in-mojave

【讨论】:

  • 嗨,巴里,最好不要发布链接作为答案,欢迎来到这里
  • 感谢您的提示。一般是这样吗?例如,我可以直接在我的答案中包含信息,但我仍然想通过包含链接来表扬这个人。
  • 我已授予它完整的磁盘访问权限。还是不行。我也在使用 Mojave。 cron 没有执行的任何其他原因?
  • 感谢您的回答,简单有效
【解决方案2】:

尝试执行以下操作:

  • 在你的python脚本第一行输入:#!/Users/MyMac/anaconda3/bin/python
  • 确保您的脚本是可执行的:chmod +x /Users/MyMac/desktop/cron_test/test.py
  • 将 cron 配方更改为:* * * * * * /Users/MyMac/desktop/cron_test/test.py,这是一种告诉 cron 每分钟执行一次作业的形式

【讨论】:

  • 我刚刚尝试了您的建议。可惜,无济于事。唯一的区别是它现在打印:“/bin/bash: Applications: command not found”
【解决方案3】:

尝试像这样制作 cron 记录:

* * * * * /Users/MyMac/anaconda3/bin/python /Users/MyMac/desktop/cron_test/test.py

这将每分钟运行一次

MAILTO cron 上期待电子邮件地址,而不是某个名字

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多