标签: launchd

如何在OSX中自动启动程序?

我有一个小程序,我想在我的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"到终端,它确实有效.

有任何想法吗?

macos osx-leopard launchd

6
推荐指数
1
解决办法
2923
查看次数

使用WatchPaths键启动.plist:如何设置最小间隔?

如何使用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>
Run Code Online (Sandbox Code Playgroud)

macos launchd

6
推荐指数
1
解决办法
4536
查看次数

SMJobBless - 关于何时要求输入管理员密码的文档

我似乎无法找到任何关于此的文档,所以希望有人可以通过Apple的SMJobBless示例代码确认我看到的行为.

我的印象是,如果它检测到需要安装新版本的帮助工具,它只会要求输入管理员密码.

但是,这种印象显然是不正确的.

我在10.6下看到的行为是,如果我第一次启动应用程序,它将要求输入密码.如果我几乎立即启动,它就不会.但是,如果我等待足够长的时间,它将再次要求输入密码.在所有这些过程中,辅助工具不会改变.

任何人都可以指向将此定义为正确行为的文档吗?

macos cocoa launchd

6
推荐指数
1
解决办法
1229
查看次数

可以使用SMJobSubmit()来执行SMJobBless安装的特权帮助程序吗?

我一直在阅读文档和SMJobBless示例以及互联网上的各种讨论.我的应用程序现在使用安装特权帮助程序SMJobBless(),但帮助程序根本不运行.

帮助程序的全部目的是在应用程序启动时加载kext,这是我应用程序的一个重要组件.我已经看到一些例子显示尝试通过XPC连接到帮助程序将启动帮助程序,但我想让我的帮助程序简单而愚蠢.

API文档显示有一个SMJobSubmit()功能.它到底是做什么用的?我可以使用它来启动先前安装的特权助手SMJobBless()吗?

我周围所有的条款感到困惑launchdService Management Framework例如,"你的工作是否在作业被加载时推出一次"中的"RunAtLoad"的plist选项控制- .究竟什么是"加载"和"启动",它们与"祝福/安装"和"提交"有什么关系?

macos xcode cocoa objective-c launchd

6
推荐指数
1
解决办法
2820
查看次数

如何以编程方式在OS X上运行具有低IO优先级和高niceness值的命令

有没有办法基本上调用system(),但具有预定义的niceness值(20)和Objective-C的低IO优先级?

(我正在谈论的低IO优先级设置是launchd有的)

我正试图/usr/bin/purge从我的Objective-C程序中启动.

它也适用于批准Mac App Store的方法.

macos objective-c launchd nice

6
推荐指数
1
解决办法
1104
查看次数

在Mac OS X应用程序包中打包C二进制文件

我正在尝试将我的二进制文件打包到一个简约的应用程序包中.但是我看到结果有些奇怪的行为.

我的包有这个最小的结构:

$ ls -R HelloWorld.app
Contents

HelloWorld.app/Contents:
Info.plist MacOS      PkgInfo

HelloWorld.app/Contents/MacOS:
helloworld
Run Code Online (Sandbox Code Playgroud)

helloworld是一个C二进制文件,编译自:

#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv) {
    while (1) {
        printf("Hello world!\n");
        sleep(2);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

现在为了奇怪的行为.我跑的时候

open ./HelloWorld.app
Run Code Online (Sandbox Code Playgroud)

该命令挂起约30秒.之后,我可以确认helloworld二进制文件正在运行.但是它的标准输出不会出现在Console.app中.如果我以编程方式启动此捆绑包(NSWorkspace sharedWorkspace)launchApplicationAtURL ...)调用成功,但二进制文件立即退出(我可以在控制台中看到它退出时出现错误代码2).

这是在OS X 10.9.2上.

我究竟做错了什么?

macos bundle launchd app-bundle

6
推荐指数
1
解决办法
1079
查看次数

Mac OSX 10.9.2,发布错误:"launchctl:文件中的可疑所有权(跳过)"

我在三个不同的位置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
Run Code Online (Sandbox Code Playgroud)

以下是我的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>
Run Code Online (Sandbox Code Playgroud)

macos cron launchd osx-mavericks

6
推荐指数
1
解决办法
2544
查看次数

是否可以在OSX中检测Power Nap/DarkWake模式

我有一个通过launchd启动的守护进程.即使在DarkWake期间也会运行,并且在OS X重新进入睡眠状态之前没有时间完成.

我可以想到以下解决方案,但没有找到实现这一目标的方法.

  1. 不要在DarkWake期间运行此守护程序进程.

    我浏览了Apple文档和论坛,但没有找到任何参考.

  2. 在DarkWake期间,通过守护进程使操作系统等待直至完成.

    尝试在守护进程中调用pmset noidle和caffeinate.它没用.OS X进入睡眠状态.在DarkWake模式下,OS X似乎禁止传递许多通知.

  3. 在守护程序进程中检测DarkWake模式.

    没有找到任何解决方案/方法来检测DarkWake模式.

请帮忙.

macos launchd power-management

6
推荐指数
1
解决办法
1258
查看次数

安排终端命令或脚本文件在特定时间Mac OS X每天运行

我想让我的电脑每晚11点45分将它的音量调到特定的水平.我正在运行OS X 10.11.4.我可以通过终端手动设置音量

osascript -e "set Volume 1.7"
Run Code Online (Sandbox Code Playgroud)

或者作为脚本

set volume 1.7
Run Code Online (Sandbox Code Playgroud)

我希望它能在夜间安排.很难在网上找到任何超级过时的东西.我真的不想使用iCal.从我发现的在线发布是要走的路,但作为一个菜鸟我不知道从哪里开始.

我看到在/ Library/LaunchAgents中使用.plist的事情所以我找到了一个漂亮的plist生成器Launched.zerowidth.com但是我在plist中放入了什么样的代码来获得所需的效果?我也在质疑,如果有任何用户登录,这是否是正确的执行路径.

我在这里走错了路吗?我愿意接受任何想法,但我不想要第三方应用程序,我必须一直保持开放状态.

谢谢,

纳布

macos scheduler launchd

6
推荐指数
3
解决办法
2万
查看次数

启动OSX没有使用teamcity代理运行bash

我有一个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
Run Code Online (Sandbox Code Playgroud)

我可以通过键入命令行./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>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

编辑

这是agent.sh文件:

https://gist.github.com/chriskooken/19f5856e3ce3c2322c53cb0afa69b057

bash teamcity launchd

6
推荐指数
1
解决办法
276
查看次数