有木有人在 osx 上用 crontab 来启动 gui 程序的么

2014-11-10 14:46:45 +08:00
 g0t3n
本来我想做的是通过 `say` 或者 `osascript` 来定期提醒下自己注意备份的<魂淡>
所以我的做法是
export DISPLAY=:0&&osascript -e 'display alert "G0 B4ck Up N0w"'
然后就获得这样的报错了
execution error: No user interaction allowed. (-1713)
然后我检查了下 DISPLAY 变量发现指向是一个文件 (socket)
/tmp/launch-O9uQAc/org.macosforge.xquartz:0
艾玛该怎么做个好看点的提醒啊啊啊
3118 次点击
所在节点    问与答
5 条回复
Neo
2014-11-10 15:20:37 +08:00
太折腾了,用wunderlist这样的工具方便点,而且多平台
ETiV
2014-11-10 16:04:04 +08:00
M a c、iOS自带“提醒事项”……

可以设定提醒时间的
dorentus
2014-11-10 17:02:14 +08:00
* DISPLAY 是 X 环境的环境变量,osascript 和 say 都不需要 X 就能运行。
* export DISPLAY=:0 && osascript -e 'display alert "G0 B4ck Up N0w"' 这样在非 interactive shell 下面,后面的命令(osascript)应该取不到前面设置的 DISPLAY 的值的吧。比较常见的写法是 env DISPLAY=:0 osascript -e 'display alert "G0 B4ck Up N0w"'
* “No user interaction allowed” 是另外一个问题,解决方式可以参见: http://stackoverflow.com/a/13484552/90172 (我没试过,不过看起来可行)
* say 写在 crontab 里面的话应该不会有这个问题吧
* 比较新版本 OS X 自带的 Notification Center 其实也挺适合这个需求的,有一些第三方的命令行程序可以发系统 notification,例如: https://github.com/alloy/terminal-notifier 自己写的话,估计也行。
dorentus
2014-11-10 17:08:15 +08:00
另外 launchd 可以用来启动 GUI 的程序。配置文件放在 ~/Library/LaunchAgents 下,配置文件语法参照 man 5 launchd.plist 或者苹果的文档(支持登录后自动启动、定时启动、失败后重新启动等等)。
g0t3n
2014-11-10 17:40:04 +08:00
@dorentus 感谢你的 stackoverflow 链接,我之前也搜到但没仔细看.的确不需要用到 DISPLAY 变量就能直接显示了。
正确的写法应该是
$ crontab -l
#minute hourly daily monthly weekly CMD
10 12 * * 1,3 sh brew update;sh brew upgrade;osascript -e 'tell application "Finder"' -e 'activate' -e 'display dialog "we have done brew update [crontab notify]"'

就是这个样子就能实现了。另外提醒信息在 /var/mail/[username]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/145361

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX