如何在启动/登录/其他时候自动运行/停止/重新启动应用程序?


42

当引导系统,用户登录,在特定时间,连接磁盘等时,如何使脚本或应用程序自动运行或停止运行?


3
Lingon只是一个应用程序,它使创建.plist文件的启动更加用户友好。也有人制作了一个基于网络的启动plist创建者:plist.spotmac.de
Chealion 2010年

!plist.spotmac.de似乎不见了。:-(
docwhat 2012年

Answers:


44

桂法

如果要在用户登录时运行某些内容,最简单的方法是使用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
  • Launchctl将在重启后运行。

有迹象表明,可以通过与Lingon试验或通过阅读man页面中找到许多其他选项launchctllaunchd.plistplistlaunchd.conf,等。


谢谢,真的很有用。您也launchctl load -w ...可以使更改持久化。根据您的反馈,我更新了OSX
poweruser

8

Lingon仍然有效。我上周刚刚使用它来创建“计划任务”。下载后,我必须使用其自动更新程序来获取最新版本,但工作正常。


1
Lingon现在也在App Store上
user151019 2011年

1
但是要找到免费的开源版本,您需要从Sourceforge中挖掘出来。最新的商业版本在Leopard(10.5)上也不起作用。但是2.1.1确实可以-请参见sourceforge.net/projects/lingon/files/Lingon/2.1.1
nealmcb 2011年

7

如果仅在引导系统时才需要运行,则只需使用“ 系统”偏好设置中“帐户”偏好设置面板的“ 登录项”选项卡。

替代文字

如果是脚本,请使用AppleScript编辑器将其另存为应用程序。如果不是AppleScript脚本,您仍然可以使用AppleScript运行脚本,如下所示:

do shell script "your script here"


?? 您确定吗 ?它在屏幕快照的用户界面中说“登录时这些项目会自动打开”-与系统启动时有什么不同吗?此外,您的链接似乎404
SSC

5

不要忘记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启动文件更容易手动编辑。

我个人很高兴为Lingon支付了5 美元


因此,代码块中的脚本应另存为/path/to/scriptsudo defaults write com.apple.loginwindow LoginHook /path/to/script?在主目录中运行脚本的关键是每个用户都可以有一个自定义(或不​​可以)~/.loginhook
Lri 2011年

@Lri-是的,正好。抱歉,这还不清楚。阻止代码可以是/usr/local/bin/loginhook.sh,由于它是由root运行的,因此它将在用户登录时查找$ HOME / .loginhook,并以该用户身份运行。
TJ Luoma

4

在iCal中,可以轻松地在指定的时间运行应用程序,因为我刚刚感谢另一个论坛!

  1. 在您希望打开应用程序的时间内在iCal中进行新活动。
  2. 在“警报”中,选择“打开文件”-因此,您可以将文件设置为打开,这显然也会打开该文件类型的默认应用程序。
  3. 要仅打开应用程序而不是文件,请将“ iCal”下拉列表更改为“其他...”,然后选择要运行的应用程序!

要注意的一件事是,如果您有多台Mac通过iCloud共享内容,则此事件也将在您可能想要或不想要的那些应用程序上运行。要使其仅在单个Mac上发生,您需要在“在我的Mac上”日历中创建活动,您可以按照以下步骤进行操作...

  1. 将鼠标悬停在日历名称上并单击将出现的“隐藏”按钮,以隐藏左侧栏中的所有其他iCloud或共享日历。
  2. 现在,右键单击(如果您是完整的克里丁人,也可以单击Option键,但仍然没有意识到自己有一根手指以上,并且可以更改鼠标的首选项,因此它比默认的“ cretinous cretinous brick for cretins”状态要有用得多。 ),然后选择“新日历”。
  3. 由于所有共享日历都被隐藏,因此该新日历将被创建为“在我的Mac上”,并且在该Mac上是本地的。

我只是自己发现了这两个提示,而感到惊喜的是,我以为我会在这里分享它们。

我从这些有用的人那里得到了信息...所以,谢谢大家!...

http://osxdaily.com/2013/04/15/launch-file-app-scheduled-date-mac-os-x/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.