当引导系统,用户登录,在特定时间,连接磁盘等时,如何使脚本或应用程序自动运行或停止运行?
当引导系统,用户登录,在特定时间,连接磁盘等时,如何使脚本或应用程序自动运行或停止运行?
Answers:
如果要在用户登录时运行某些内容,最简单的方法是使用GUI。您可以
System Prefs > Accounts > Login Items
屏幕,然后在此处添加项目
+
符号.app
到窗格上Options
,然后选择Open at Login
如果您要启动不是的内容.app
,或者想要对启动它有更多的控制权,例如:
那么您想使用的技术解决方案是launchd
。
设置launchd
配置文件的最简单方法是使用工具来提供帮助。在撰写本文时,最受欢迎的方法是Lingon(可从SourceForge获得较早的免费版本)或PList网站工具。
如果您不想使用Lingon或PList网站,而只想使用系统上可用的原始工具,则可以launchd
plist
手工编写自己的工具
这是我启动的脚本,用于在系统引导后连续运行SomeApp (与用户登录无关)。它在/ System / Library / LaunchAgents /中,名为SomeApp.restart.plist。如果它是基于用户登录名运行的,则可以将其存储在〜/ Library / LaunchAgents /
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>SomeApp.restart</string>
<key>ProgramArguments</key>
<array>
<string>/path/to/SomeApp.app/Contents/MacOS/SomeApp</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>5</integer>
<key>Minute</key>
<integer>10</integer>
</dict>
</dict>
</plist>
加载一次
launchctl load ~/Library/LaunchAgents/SomeApp.restart.plist
RunAtLoad
选项将在launchctl第一次运行它时启动应用程序。KeepAlive
选项崩溃,它将重新启动该应用程序。StartCalendarInterval
会在一定的时间运行它。大概这与前两个是互斥的,但包括在内是为了说明可以用launchd
有迹象表明,可以通过与Lingon试验或通过阅读man页面中找到许多其他选项launchctl
,launchd.plist
,plist
,launchd.conf
,等。
Lingon仍然有效。我上周刚刚使用它来创建“计划任务”。下载后,我必须使用其自动更新程序来获取最新版本,但工作正常。
如果仅在引导系统时才需要运行,则只需使用“ 系统”偏好设置中“帐户”偏好设置面板的“ 登录项”选项卡。
如果是脚本,请使用AppleScript编辑器将其另存为应用程序。如果不是AppleScript脚本,您仍然可以使用AppleScript运行脚本,如下所示:
do shell script "your script here"
不要忘记Loginhooks。
尽管它们以root身份运行,但您应该应该能够使用以下命令执行$ HOME / .loginhook脚本:
#!/bin/sh
home=`eval echo ~$user`
if [ -x "$home/.loginhook" ]; then
logger -t $0 "executing .loginhook of user $user"
su - $user -c "$home/.loginhook"
fi
然后只需将您想要的任何命令添加到〜/ .loginhook
同样,尽管“启动”是“ Mac方式”,但crontab仍然是一个完全可行的选择,并且比XML启动文件更容易手动编辑。
/path/to/script
和sudo defaults write com.apple.loginwindow LoginHook /path/to/script
?在主目录中运行脚本的关键是每个用户都可以有一个自定义(或不可以)~/.loginhook
?
在iCal中,可以轻松地在指定的时间运行应用程序,因为我刚刚感谢另一个论坛!
要注意的一件事是,如果您有多台Mac通过iCloud共享内容,则此事件也将在您可能想要或不想要的那些应用程序上运行。要使其仅在单个Mac上发生,您需要在“在我的Mac上”日历中创建活动,您可以按照以下步骤进行操作...
我只是自己发现了这两个提示,而感到惊喜的是,我以为我会在这里分享它们。
我从这些有用的人那里得到了信息...所以,谢谢大家!...
http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/