AppleScript 对话框和重复的“say”命令在 OS X cronjob 中不起作用

AppleScript 对话框和重复的“say”命令在 OS X cronjob 中不起作用

我在 OS X 中有一个脚本,它在给定目录中查找具有最近 mtime 的文件,查看它是否(过去)某个大小,如果是,则创建一个 AppleScript 对话框 + 重复调用say命令,直到对话框关闭。我已经验证该脚本适用于任何给定目录,包括我感兴趣的目录。但是,只有当我从交互式 shell 运行它时(即通过 Terminal.app、xterm、等或 Emacs 中的 Eshell)。看,当我将脚本作为 cronjob 运行时,它所做的只是运行say脚本中的调用一次;没有对话框,也没有重复,say直到框关闭,这正是我期望它所做的。但是,我在我的 中没有收到任何错误消息mail,因此似乎cron认为一切正常。

我设置 cronjob 的方式如下:

SHELL=/bin/zsh
*/1 * * * * . $HOME/.zshrc && ps caux | grep -iq my_script && : || $HOME/bin/my_script /some/dir

翻译:它每分钟运行一次,首先进行采购~/.zshrc(设置环境变量,如$PATH等)。然后它运行ps caux,grepping 我的脚本的进程名称,如果找到匹配则不执行任何操作。否则,运行我的脚本,目标为/some/dir.检查我的进程是否正在运行是为了确保不会发生重叠的实例,并且我还验证了它是否正常工作。

因此,当我在终端中运行该 cronjob 的代码时,它工作得很好。然而,正如前面所解释的,某些原因导致 cronjob 本身无法按预期运行。当我咨询谷歌关于此类问题时,我发现这个问题关于SO这似乎反映了我的问题,但是对于Linux。我尝试过接受的答案那里指出尝试通过 启动作业xterm。 IE:

*/1 * * * * . $HOME/.zshrc && xterm -e ps caux | grep -iq my_script && : || $HOME/bin/my_script /some/dir

然而,这并没有什么卵用。同样,通过交互式 shell 运行此 cronjob 的代码按预期工作,但cron它本身仍然奇怪地运行脚本,唯一的区别是xterm每分钟都会出现一个窗口。

我很困惑为什么会发生这种情况,我希望脚本能够像从交互式 shell 运行时一样工作。我怎样才能做到这一点以及为什么会cron以意外的方式运行脚本?

相关内容