我有一个小程序,我想在我的mac启动时自动打开.
因为这个程序接受命令行参数,它不仅仅是去系统Prefs/Accounts/Login项目并在那里添加它...
从谷歌,我读到我可以在我的用户的主文件夹中创建一个.profile文件,这将执行我放入其中的任何内容...所以我有一个.profile页面〜像这样:
-rw-r - r - @ 1 matt staff 27 27 Sep 13:36 .profile
包含这个......
/ Applications/mousefix 3.5
但它不会在启动时执行!如果我手动输入"/ Applications/mousefix 3.5"到终端,它确实有效.
有任何想法吗?
如何使用WatchPath密钥为launchd.plist脚本设置最小间隔?
例如,我想每次在目录中出现新文件时运行一个脚本,但我希望它最多只能每小时运行一次.
launchd.plist可能看起来像这样:
<?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>org.me.pytag</string>
  <key>ProgramArguments</key>
  <array>
    <string>/Users/me/bin/pytag.py</string>
  </array>
  <key>WatchPaths</key>
  <array>
    <string>/Volumes/Data/Media/Video/Processing/Converted</string>
  </array>
  <key>StandardOutPath</key>
  <string>/dev/null</string>
</dict>
</plist>
我似乎无法找到任何关于此的文档,所以希望有人可以通过Apple的SMJobBless示例代码确认我看到的行为.
我的印象是,如果它检测到需要安装新版本的帮助工具,它只会要求输入管理员密码.
但是,这种印象显然是不正确的.
我在10.6下看到的行为是,如果我第一次启动应用程序,它将要求输入密码.如果我几乎立即启动,它就不会.但是,如果我等待足够长的时间,它将再次要求输入密码.在所有这些过程中,辅助工具不会改变.
任何人都可以指向将此定义为正确行为的文档吗?
我一直在阅读文档和SMJobBless示例以及互联网上的各种讨论.我的应用程序现在使用安装特权帮助程序SMJobBless(),但帮助程序根本不运行.
帮助程序的全部目的是在应用程序启动时加载kext,这是我应用程序的一个重要组件.我已经看到一些例子显示尝试通过XPC连接到帮助程序将启动帮助程序,但我想让我的帮助程序简单而愚蠢.
API文档显示有一个SMJobSubmit()功能.它到底是做什么用的?我可以使用它来启动先前安装的特权助手SMJobBless()吗?
我周围所有的条款感到困惑launchd和Service Management Framework例如,"你的工作是否在作业被加载时推出一次"中的"RunAtLoad"的plist选项控制- .究竟什么是"加载"和"启动",它们与"祝福/安装"和"提交"有什么关系?
有没有办法基本上调用system(),但具有预定义的niceness值(20)和Objective-C的低IO优先级?
(我正在谈论的低IO优先级设置是launchd有的)
我正试图/usr/bin/purge从我的Objective-C程序中启动.
它也适用于批准Mac App Store的方法.
我正在尝试将我的二进制文件打包到一个简约的应用程序包中.但是我看到结果有些奇怪的行为.
我的包有这个最小的结构:
$ ls -R HelloWorld.app
Contents
HelloWorld.app/Contents:
Info.plist MacOS      PkgInfo
HelloWorld.app/Contents/MacOS:
helloworld
helloworld是一个C二进制文件,编译自:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char **argv) {
    while (1) {
        printf("Hello world!\n");
        sleep(2);
    }
    return 0;
}
Info.plist包含:
<?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>CFBundleExecutable</key>
    <string>helloworld</string>
    <key>CFBundleIdentifier</key>
    <string>com.litl.helloworld</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>HelloWorld</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0.0</string>
    <key>CFBundleVersion</key>
    <string>20</string>
    <key>LSMinimumSystemVersion</key>
    <string>10.6</string>
    <key>LSUIElement</key>
    <true/>
    <key>LSBackgroundOnly</key>
    <true/>
</dict>
</plist>
现在为了奇怪的行为.我跑的时候
open ./HelloWorld.app
该命令挂起约30秒.之后,我可以确认helloworld二进制文件正在运行.但是它的标准输出不会出现在Console.app中.如果我以编程方式启动此捆绑包(NSWorkspace sharedWorkspace)launchApplicationAtURL ...)调用成功,但二进制文件立即退出(我可以在控制台中看到它退出时出现错误代码2).
这是在OS X 10.9.2上.
我究竟做错了什么?
我在三个不同的位置launchctl: Dubious ownership on file (skipping): ~.plist
nothing found to load运行launchctl load命令得到了同样的错误,如下所示,并且它们都没有工作:
sudo launchctl load /Library/LaunchDaemons/updates.novel.plist
sudo launchctl load /Library/LaunchAgents/updates.novel.plist
sudo launchctl load /Users/username/Library/LaunchAgents/updates.novel.plist
以下是我的updates.novel.plist文件,请你看看,让我知道是什么问题?谢谢
<?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>GroupName</key>
   <string>admin</string>
   <key>UserName</key>
   <string>Username</string>
   <key>Debug</key>
   <true/>
   <key>Label</key>
   <string>updates.novel</string>
   <key>ProgramArguments</key>
   <array>
      <string>/Applications/AMPPS/php-5.3/bin/php</string>
      <string>/Applications/AMPPS/www/files/allnovels/novel.php</string>
      <string>--daemon</string>
   </array>
   <key>StandardErrorPath</key>
   <string>/var/log/files/error.1.log</string>
   <key>StandardOutPath</key>
   <string>/var/log/files/error.2.log</string>
   <key>RunAtLoad</key>
   <true/>
   <key>AbandonProcessGroup</key>
   <true/>
   <key>StartCalendarInterval</key>
      <dict>
      <key>Hour</key>
      <integer>14</integer>
      <key>Minute</key>
      <integer>0</integer>
      </dict>
</dict>
</plist>
我有一个通过launchd启动的守护进程.即使在DarkWake期间也会运行,并且在OS X重新进入睡眠状态之前没有时间完成.
我可以想到以下解决方案,但没有找到实现这一目标的方法.
不要在DarkWake期间运行此守护程序进程.
我浏览了Apple文档和论坛,但没有找到任何参考.
在DarkWake期间,通过守护进程使操作系统等待直至完成.
尝试在守护进程中调用pmset noidle和caffeinate.它没用.OS X进入睡眠状态.在DarkWake模式下,OS X似乎禁止传递许多通知.
在守护程序进程中检测DarkWake模式.
没有找到任何解决方案/方法来检测DarkWake模式.
请帮忙.
我想让我的电脑每晚11点45分将它的音量调到特定的水平.我正在运行OS X 10.11.4.我可以通过终端手动设置音量
osascript -e "set Volume 1.7"
或者作为脚本
set volume 1.7
我希望它能在夜间安排.很难在网上找到任何超级过时的东西.我真的不想使用iCal.从我发现的在线发布是要走的路,但作为一个菜鸟我不知道从哪里开始.
我看到在/ Library/LaunchAgents中使用.plist的事情所以我找到了一个漂亮的plist生成器Launched.zerowidth.com但是我在plist中放入了什么样的代码来获得所需的效果?我也在质疑,如果有任何用户登录,这是否是正确的执行路径.
我在这里走错了路吗?我愿意接受任何想法,但我不想要第三方应用程序,我必须一直保持开放状态.
谢谢,
纳布
我有一个shell脚本startup.sh执行以下操作(创建一个RAM磁盘并启动teamcity代理):
#!/bin/bash
DISK=`/usr/bin/hdiutil attach -nobrowse -nomount ram://16777216`
/usr/sbin/diskutil erasevolume HFS+ "RamDiskCache" $DISK
/Users/administrator/buildAgent/bin/agent.sh start
我可以通过键入命令行./startup.sh运行它,它运行正常.当我从launchd运行时,它只创建RAM磁盘,teamcity无法启动.
我的launchd 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>Label</key>
        <string>com.datafinch.teamcity</string>
        <key>Program</key>
        <string>/Users/administrator/startup.sh</string>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>
我错过了什么?
编辑
这是agent.sh文件:
https://gist.github.com/chriskooken/19f5856e3ce3c2322c53cb0afa69b057
launchd ×10
macos ×9
cocoa ×2
objective-c ×2
app-bundle ×1
bash ×1
bundle ×1
cron ×1
nice ×1
osx-leopard ×1
scheduler ×1
teamcity ×1
xcode ×1