繁体   English   中英

使用 cron 运行脚本在 mac 上不起作用

[英]Running script with cron doesn't work on mac

我一直在尝试运行一个每分钟执行一个 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

Job 的描述在一行中,并且在定义的末尾有一个换行符。

我在/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

它仍然不起作用。 蟒蛇代码是:

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


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

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

尝试这样做:

  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)

尝试执行以下操作:

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

尝试像这样制作 cron 记录:

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

这将每分钟运行一次

MAILTO cron 上需要电子邮件地址,而不是某个名称

这个问题的所有现有答案(虽然有用的一般 cron 建议)都是错误的。

OP 错误是一个有六个时间条目的 cron,而不是五个:

*/1 * * * * * /Users/MyMac/anaconda3/bin/python

因此,cron 将前五个条目作为时间指令读取,将第六个*作为终端指令(扩展为当前目录中文件/目录列表的通配符),然后尝试将该列表中的第一个字符串作为命令并给出一个错误。

这通常会给出如下错误:

/bin/bash: Applications: command not found
/bin/bash: AnacondaProjects: command not found
/bin/zh: Applications: command not found
etc...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM