问题标签 [launchd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7453 浏览

unix - 如何在 MacOS 上加载系统范围的守护进程

我正在尝试使用此命令加载我的守护程序应用程序launchctl load /Library/LaunchDaemons/myPlistFileName它工作正常,但仅当我的用户登录系统时。

我如何加载我的守护程序应用程序,它会在没有任何用户登录系统的情况下保持加载(如 Windows 服务)?

该命令sudo launchctl load /Library/LaunchDaemons/myPlistFileName给我一个错误 - >没有找到加载

哪种方法是正确的?


编辑:我的 Plist 文件

目前是这样:在系统启动时,我的守护程序以 root 权限启动。在我使用我的用户帐户登录后,守护进程重新启动,我的用户是该进程的新所有者

0 投票
1 回答
595 浏览

launchd - 如何使用 launchd 启动应用程序的多个实例?

我的申请分为两部分。主应用程序和辅助工具。帮助工具执行具有提升权限的任务。

启动的 plist 如下所示:(仅包括重要设置。)

有没有办法为每个到套接字的连接启动一个新的帮助程序实例?

或者,是否有用于处理多个请求的现有模板?(我现在正在自己做这个,这是相当多的丑陋代码。)

0 投票
7 回答
8850 浏览

apache2 - MacPorts Apache2 在启动时停止启动

我最近在两台不同的机器上注意到的一点是,当我启动时,通过 MacPorts 安装的 Apache2 似乎已经停止启动。诚实的事实是,我不能发誓以前这样做过,但我认为我会注意到这一点,因为安装 LaunchDaemon 是我安装过程的一部分。事实上,如果我尝试重新加载 LaunchDaemon,它会失败:

除非我手动启动 Apache(使用sudo apachectl restart),否则在我的进程列表中对“apache2”或“httpd”进行 grep'ing 只会产生以下结果:

1410639199 6960 6792 0 0:00.00 ttys001 0:00.00 egrep apache2|httpd

看起来守护程序本身就位,但没有可执行文件。据我所知/可以告诉,相关的可执行文件(httpd 和 apachectl)是每个人都可以执行的。

有没有其他人注意到这一点?有任何想法吗?

更新

按照下面的要求,我确实执行了launchctl list. 清单很长,我不知道如何剪掉它,但只要说没有org.macports.*列出任何项目就足够了。这本身很有趣,因为我的 MySQL 守护程序是以相同的方式加载的。它有效,但也没有出现在列表中。让我知道是否真的需要整个输出。

更新

我假设我是launchctl list在 sudo 下执行的,但在 mipadi 下面的评论提示下,我再次尝试确保我这样做并且我假设不正确。在 sudo 下执行时,出现 MacPorts 项:

我不确定这是否会有所帮助,但仍然有更多信息。

更新

我在LaunchDaemons 和 Environment Variables提出了一个不同但相关的问题。随着我了解更多,我会更新这两个问题。

更新

今天,根据邮件列表输入,我尝试使用通配符主目录。在学术上,它比我想要的更具包容性,但实际情况是我是唯一一个使用这台电脑的人;当然是唯一一个拥有 Apache 配置文件的人。

很遗憾...

0 投票
1 回答
3509 浏览

macos - 在 launchd 中使用 startCalendarInterval 每 x 分钟运行一次作业(例如在 cron 中使用步长值“*/x”)?

我正在使用 mac osx 10.6 - 似乎分钟参数决定了作业运行一小时后的分钟数。但是你如何设置一个工作来运行每一个小时后的 x 分钟。

我尝试将分钟设置为一个包含多个数字的数组和一个包含一个字符串“*/5”的数组,即类似于 crontab 的每五分钟语法。

0 投票
1 回答
479 浏览

python - 如何用 Python 程序替换启动调度

Mac OS X 系统启动程序launchd启用作业调度(类似于cron)。通过创建launchd代理,可以通过以下事件之一触发程序:

  • 时间间隔已过
  • 某个日历日期到了
  • 文件路径已被修改
  • 某物已被放置在某个目录(队列目录)中
  • 已安装卷

我以前依靠 launchd 来启动一组 Python 脚本来自动化 OS X 系统。但是,由于添加新脚本通常还需要安装新的 launchd 代理来启动它,所以我想将launchd排除在外。Python 程序应该等待并观察上述事件的发生,然后调度适当的例程。

是否有适合检测上述事件的 Python 模块?或者,作为一个更普遍的问题,我如何使用 Python(可能还有通过 AppScript 桥的 AppleScript)替换此设置中的launchd ?对不起,如果问题相当模糊。阅读建议也值得赞赏。

0 投票
2 回答
1923 浏览

macos - 从启动守护进程生成屏幕会话

我编写了一个launchd .plist,它应该在WindowServer 启动时附加一个调试器。脚本的主要部分看起来像

这将启动一个分离的屏幕会话,其中 gdb 连接到 WindowServer。

但是,这似乎在 Snow Leopard 下的 launchd 中触发了一个错误条件,导致它向日志中输出错误消息:

我应该注意,无论系统启动以来已经过了多长时间,都会出现“......系统Mach引导程序中不允许”消息。

是否有解决方法,以便我可以生成我的屏幕会话?

根据launchd的手册页,

守护进程不应尝试显示 UI 或直接与用户的登录会话交互。

这可能表明 launchd 将此行为视为与另一个会话交互并拒绝它。代码在这里,但我不熟悉: http: //launchd.macosforge.org/trac/browser/trunk/launchd/src/launchd_core_logic.c#L8250

0 投票
2 回答
4974 浏览

macos - 已启动的代理未启动

我正在尝试launchd agent为每个登录到 Mac OS X 系统的用户编写一个运行简单应用程序的应用程序。

我创建了一个名为的文件com.mycompany.myapp.plist并将其放在/Library/LaunchAgents. 该文件的内容是:

最初我没有StartInterval设置密钥,因为我认为代理会自动启动。问题是除非我手动发出以下两个命令,否则代理不会启动:

此外,当我运行时,launchctl list com.mycompany.myapp我得到以下输出:

请注意,LimitLoadToSessionType参数已更改。

我在这里错过了什么吗?是否有不同的机制来启动这样的代理?为什么LimitLoadToSessionType财产变了?

0 投票
1 回答
2877 浏览

c++ - 在用户上下文中从守护进程启动代理

我有一个在 Mac OSX 10.6 机器的登录上下文中运行的启动守护程序。我想从该代理为每个用户启动一个代理,并让该代理在用户的登录上下文中运行。但是,我需要非常小心地控制代理应用程序的精确参数,这就是为什么我不能像使用守护进程那样使用启动代理。

如何创建在登录用户的上下文中运行的进程?我已经确认seteuidsetuid调用了,但这些不会改变代理应用程序的执行上下文。

我知道这不是推荐的 Apple 做事方式,但我真的没有选择 - 守护程序应用程序的设计非常不灵活(它必须跨许多不同的系统运行)。是否有一种解决方法允许我从在登录上下文中运行的守护程序在登录用户的 GUI 上下文中运行应用程序?

我正在使用 C++、Carbon 和 Cocoa。

0 投票
5 回答
8503 浏览

macos - 在launchd.conf中有空格的setenv变量?

我是一个 Linux 用户,最近刚买了一个 mac。我正在尝试设置我的 IDE,并发现 Mac 不使用 .bashrc / .bash_profile / 等作为 GUI 应用程序。因此,如果您有一个需要环境变量的 GUI 应用程序,您显然应该在 /etc/launchd.conf 中执行它

问题是,这个文件使用 csh 风格的 setenv 语法(“setenv key value”而不是“export key='value'”),所以现在我有一个变量,里面有一个空格,我不知道该怎么做. 没有任何工作。这是我试图测试的:

重新启动后,只有 var #5 和 #8 存活。(没有空格的。)其余的都不在我的环境中。

0 投票
3 回答
3644 浏览

objective-c - 使用 NSTimer 安排多个日常活动?

我有一个存储在NSDictionary.

对于下面的示例,我的计划时间为20120 年 1 月 13 日 2:00PM2012 年 1 月 13 日 2:05PM。如何将这两个添加到队列中以自行触发?

构建计划缓存:

安排活动:

触发事件:

示例事件: