我已经研究了这个东西已经有一段时间但是没有找到任何好的解决方案,是时候要求人群的智慧......
这就是我想要实现的目标:仅在工作日,当我重新登录时首先迎接我(Macbook最有可能来自待机模式而不启动) ,我想启动一个脚本来关闭一些窗口并打开我的日常计划列表。如果我几天没有打开我的Mac,它不应该执行多次。脚本本身在这里并不重要,但我无法在任何地方为执行挂钩找到可靠的解决方案。
我已经涉足Automator并已经阅读了一些任务:
Programmatically run at startup on Mac OS X? Running script upon login mac
但我看到的所有内容都与登录项有关,看起来它们在从待机状态恢复时并未执行。
我对任何解决方案持开放态度,最好是命令行或烘焙(启动等),但也可以是应用程序。
提前致谢,
的Dom
答案 0 :(得分:0)
我已经找了好几年了,找不到合适的解决办法。似乎macOS开发人员不认为从锁定屏幕登录与“登录”相同。
我见过的唯一解决方案是SleepWatcher等不优雅的投票流程......
http://www.bernhard-baehr.de/
......这进一步表明没有简单的事件/钩子。
这种方法应该有效,操作系统对此非常愚蠢只是一种耻辱。
编辑:我添加了另一个答案,提供了更多有希望的信息,但仍然认为这是vanilla macOS中的一个基本问题,并且相信这个答案仍然是准确的。
答案 1 :(得分:0)
在针对10.11进行测试时,这种方法实际上对我来说相当可靠:
https://superuser.com/questions/229773/run-command-on-startup-login-mac-os-x#answer-229792
在登录屏幕上或登录屏幕之前,它不能解决以一个用户(例如root)身份运行某些权限的所有权限问题,但是,如果您能弄清楚,它确实可以运行此时会显示登录屏幕,并且在登录后似乎可以正常运行,这正是您实际要求的。
即使答案也是该问题的答案,也可以在此处复制,但这两个问题是不同的:
来自用户“斯科特” ...
要在OS X上启动时运行命令,您需要使用launchd
。
如果您不想使用Lingon,则需要创建一个launchd
属性列表。这是一个XML文件,因此您可以使用自己喜欢的文本编辑器来完成此操作,也可以使用随Mac OS X开发工具一起安装的属性列表编辑器。创建以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>some.meaningful.name</string> <!-- org.mongodb.mongodb perhaps? -->
<key>OnDemand</key>
<false/>
<key>UserName</key>
<string>anAppropriateUser</string>
<key>GroupName</key>
<string>anAppropriateGroup</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/MongoDB/bin/mongod</string>
<string>--dbpath</string>
<string>/usr/local/mongo/data</string>
<string>--fork</string>
<string>--logpath</string>
<string>/usr/local/mongo/log</string>
</array>
</dict>
</plist>
将其保存在/Library/LaunchAgents/some.meaningful.name.plist
中(您将需要一个管理员帐户和/或sudo
),然后打开一个终端并执行以下操作:
sudo launchctl load /Library/LaunchAgents/some.meaningful.name.plist
这将导致启动加载该项目,这将导致它在启动时启动MongoDB。作为奖励,launchd
将对其进行监视,并且,如果由于任何原因退出该视图,它将重新启动。要摆脱该项目,只需将上述命令中的load替换为unload。
来自msanford用户...
这将尝试每10秒运行一次应用程序,这对于不死的服务非常有效。如果这是针对准时运行一次的脚本(在我的情况下,是在重启后发送Slack消息),则将<key>LaunchOnlyOnce</key><true/>
添加到字典中。
答案 2 :(得分:-2)
我原本以为你会有一堆答案。 “工作日”的概念需要一些定义。如果你只是在谈论M-F,或者其他什么,你可以考虑每天运行一个脚本,它决定了一周中的某一天,并且在非工作日什么都不做。你知道python吗?如果是这样,您可以编写一个每天(甚至不断)运行的程序,并跟踪它执行某些操作的最后一天。你可以为你的工作日设置一个动作 - 甚至包括假期,让它做你想做的事。
你也可以在任何shell编程语言中做同样的事情 - bash,ksh等。
Applescript可能我们可以处理您想要的一些事情。我在Applescript上太新手提出任何具体建议 - 作为编程语言IMO有点尴尬。