在OS X的引导时间运行脚本的最简单方法是什么?


12

我想要一个脚本(bash / zsh / ruby​​ / ...)在OS X的启动时运行。最简单的方法是什么,而又不会弄乱xml / plist文件,并且最好不需要制作元AppleScript 。

Answers:


7

MacOS X使用Vixie cron,它具有用于重新启动时启动的特殊元标记。有关文件格式,请参见手册页

就像是:

@reboot /path/to/script.sh

在您的crontab中会起作用。我不确定这是不是比发布的更好的解决方案,您可能比发布的cron具有更多的发布元工具。


喜欢它,您证明我错了:-)尽管cron在OS X上默认情况下记录不是那么好(几天前有一个话题)。
丹尼尔·贝克

太棒了。
约翰·巴希尔

1
注意在OS X中cron,at等在某种程度上已被弃用。我在各种文档中都找不到明确的声明,也不知道它们有多积极地被弃用,但通常似乎首选launchd。有关介绍,请参见启动的文档
诺曼·格雷

plist对我不起作用-这就像一种魅力-谢谢!:-D
BG Bruno

老实说,不确定在OS X上的语法是否相同
。– NobleUplift,

6

如果您改变意见:

<?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>com.superuser.245713</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/script.sh</string>
    </array>
    <key>UserName</key>
    <string>someuser</string>
</dict>
</plist>

按原样存储com.superuser.245713.plist/Library/LaunchAgents/并成为root:wheel所有者/组。


1
可以说最好放进去,/Library/LaunchAgents而不是/System/Library/LaunchDaemons因为它/System是特定于操作系统的东西,而下面的/Library东西更多地用于第三方东西。另外,LaunchDaemons“应包含将以root身份运行的项目,通常是后台进程”,其中LaunchAgents“以用户身份运行或在用户域的上下文中运行”。这些引文的来源是一篇很棒的文章,我就发布的问题进行了咨询。
Doug Harris

@DougHarris感谢您的建议!我必须承认我只是临时输入-虽然我通常测试我的解决方案,但我不愿意为此重启机器。
丹尼尔·贝克

这非常好,尽管我更喜欢Vixie cron解决方案:)
John Bachir

实际上,它应该放在/ Library / LaunchDaemons中。代理仅在用户会话中运行,即,只有在某人登录后它们才能运行(或更精确地说,有资格运行),每次有人登录时它们将再次运行,并且始终以当前登录的用户身份运行。守护程序在引导时运行(/有资格运行),尽管它们通常以root身份运行,但可以使用UserName键以其他用户身份运行。
Gordon Davisson


2

如果您希望脚本在用户登录时(而不是在计算机启动时)(以root用户身份)运行,则还有“ 登录挂钩”

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.