在Mac上无法使用cron运行脚本

时间:2019-02-01 21:19:23

标签: python macos cron

我一直试图运行一个cron作业,该作业每分钟执行一次python脚本。 执行“哪个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

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

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


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

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

3 个答案:

答案 0 :(得分:2)

尝试这样做:

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

答案 1 :(得分:0)

尝试执行以下操作:

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

答案 2 :(得分:0)

尽量使cron的记录是这样的:

var arr = [{
  'break_time': '09:00'
}, {
  'break_time': '09:00'
}, {
  'break_time': '09:00'
}, {
  'break_time': '10:00'
}, {
  'break_time': '10:00'
}, {
  'break_time': '15:00'
}, {
  'break_time': '09:00'
}];
var obj = {};
for(var i = 0; i < arr.length; i++) {
  var arrObj = arr[i];
  if(obj[arrObj.break_time]){
    obj[arrObj.break_time]++;
  } else {
    obj[arrObj.break_time] = 1;
  }
}
console.log(obj);

此将运行它的每分钟

* * * * * /Users/MyMac/anaconda3/bin/python /Users/MyMac/desktop/cron_test/test.py 上,cron希望使用电子邮件地址,而不是某些姓名