如何制作脚本或应用程序以在系统被启动时自动运行或停止运行,用户在特定时间,附加磁盘等时登录?

有帮助吗?

解决方案

GUI方法

如果您希望在用户登录时运行某些东西,那么最简单的方法是使用GUI。你可以

  • System Prefs > Accounts > Login Items 屏幕,并在此处添加该项目
    • 单击 + 象征
    • 拖动 .app 上窗格
  • 在码头中,提出应用程序上下文菜单,选择 Options, ,然后选择 Open at Login

启动方法

如果您想启动不是 .app, ,或者您想对启动它有更多的控制权,例如:

  • 在特定时间或指定间隔
  • 如果崩溃,不断重新启动
  • 与用户登录无关
  • 作为网络访问的函数
  • 仅在另一个过程运行时运行
  • 当文件添加到文件夹中时
  • 等等

然后,您想使用 技术解决方案 那是 launchd.

设置一个最简单的方法 launchd 配置文件是使用工具来帮助。在写作时,最受欢迎的方法是 林肯 (从SourceForge获得较旧的免费版本)或 PLIST网站 工具。

手工编码

如果您不想使用Lingon或PLIST网站,并且只想使用系统上可用的原始工具,则可以编写自己的 launchd plist 用手

这是我运行Someapp的启动脚本 连续 系统启动后(独立于用户登录)。它在/system/library/lunageentents/中,并称为someapp.restart.plist。如果它是根据用户登录运行的,则可以将其存储在〜/library/lunageentagents/

<?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 选项将启动该应用程序,首次启动CTAUNTL运行此操作。
  • KeepAlive 如果该应用程序崩溃,选项将重新发布该应用程序。
  • StartCalendarInterval 会在一定时间运行它。据推测,这与前两个相互排斥,但包括以表明可以做什么 launchd
  • 启动CTCL将在重新启动后运行。

通过尝试Lingon或阅读MAN页面,可以找到许多其他选择 launchctl, launchd.plist, plist, launchd.conf, , ETC。

其他提示

林肯仍然有效。我上周只是使用它来创建一个“计划的任务”。下载后,我必须使用其自动上层器以获取最新版本,但效果很好。

如果仅在启动系统时必须运行,只需使用 您的帐户偏好窗格的登录项目选项卡中的系统首选项。

alt text

如果是脚本,请使用AppleScript编辑器将其保存为应用程序。如果不是AppleScript脚本,您仍然可以使用AppleScript来运行这样的脚本:

do shell script "your script here"

不要忘记登录。

尽管它们作为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 Way” crontab仍然是一个非常可行的选择,并且比XML启动文件更容易手工编辑。

就个人而言,我很高兴为5美元支付 林肯.

在指定时间运行应用程序可以在ICAL中轻松完成,因为我刚刚发现了另一个论坛!

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

要注意的一件事是,如果您有多个Mac在iCloud上共享内容,则此事件也将在这些应用程序上运行,您可能想要或可能不想要。为了使此操作仅在单个Mac上发生,您需要在“我的Mac上”日历中创建事件,您可以按照以下操作做到这一点...

  1. 通过悬停在日历名称上并单击将会显示的“隐藏”按钮,将所有其他iCloud或共享日历隐藏在左手条上。
  2. 现在右键单击(如果您是完整的Cretin,则单击选项,但仍未意识到您有多个手指,并且可以更改鼠标的首选项,以便它比其默认的“ Cretinous Brick for Cretins”状态更有用)并选择“新日历”。
  3. 因为所有共享日历都是隐藏的,所以此新日历将被创建为“我的Mac上”,并且将是此Mac的本地。

我只是自己发现了这一点,这两个技巧都令人惊讶,所以我想在这里分享它们。

我从这里收到了这些乐于助人的人的信息...所以谢谢你们!

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

许可以下: CC-BY-SA归因
不隶属于 apple.stackexchange
scroll top