【发布时间】: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”中运行它时,我得到了我想要的结果。